在 DRF ModelSerializer 中生成自定义响应

Generate custom response in DRF ModelSerializer

我需要一些帮助,我在 DRF 中使用了 ModelSerializer,这是问题所在:

我想动态生成响应,我的意思是我决定用户的输入,所以我需要将请求参数传递给ModelSerializer,然后判断我的条件是否成立,生成字段,否则生成一些其他字段.

像这样:

class AlbumSerializer(serializers.ModelSerializer):

    class Meta:
        model = Album
        if request.SOME_CONDITION: 
            fields = ('id', 'name_fa', 'name_en', 'price')
        else: 
            fields = ('description', 'image_path_absolute', 'publisher')

我在谷歌上搜索了一下,发现我可以使用 context 将参数传递给序列化程序,但在序列化程序中我需要通过 self 对象获取参数。

我该怎么做?

我找到了。

我们需要覆盖序列化器class的__init__()方法,然后使用上下文获取参数,排除不需要的字段,最后调用超级class。

def __init__(self, *args, **kwargs):
    if 'context' in kwargs:
        context = kwargs.get('context')
        if 'user' in context:
            if SOME_CONDITION:
                super(AlbumSerializer, self).__init__(*args, **kwargs)
                self.fields.pop(key)
                pass
    super(AlbumSerializer, self).__init__(*args, **kwargs)