【问题标题】:Generate custom response in DRF ModelSerializer在 DRF ModelSerializer 中生成自定义响应
【发布时间】:2015-11-12 07:42:01
【问题描述】:

我需要一些帮助,我在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 对象获取参数。

我该怎么做?

【问题讨论】:

    标签: python python-2.7 django-rest-framework django-serializer


    【解决方案1】:

    是的

    我找到了。

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

    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)
    

    【讨论】:

      猜你喜欢
      • 2023-01-20
      • 2019-01-01
      • 2015-12-22
      • 2021-07-27
      • 2016-04-27
      • 2015-11-24
      • 2021-11-25
      • 2022-11-02
      • 2016-02-21
      相关资源
      最近更新 更多