【问题标题】:Django serializer inherit and extend fieldsDjango 序列化器继承和扩展字段
【发布时间】:2018-04-18 13:11:37
【问题描述】:

我有这 2 个序列化程序:

class BasicSerializer(serializers.ModelSerializer):
    class Meta:
         model = MyModel
         fields = ('lengthy', 'touple', 'of', \
              'fields', 'like', '10', 'of', 'them')

class AdvandedSerializer(BasicSerializer):
    additional_field = serializers.SerializerMethodField()
    def get_additional_field(self, obj):
        return('not important')
    class Meta:
         model = MyModel
         fields = ('lengthy', 'touple', 'of', \
              'fields', 'like', '10', 'of', 'them', 'additional_field')       

这显然是相当丑陋的代码。我想从super() 获取并扩展fields touple,但我不知道如何。

【问题讨论】:

    标签: django


    【解决方案1】:

    你可以这样做:

    class BasicSerializer(serializers.ModelSerializer):
        class Meta:
             model = MyModel
             fields = ('lengthy', 'touple', 'of', 'fields', 'like', '10', 'of', 'them')
    
    class AdvandedSerializer(BasicSerializer):
        additional_field = serializers.SerializerMethodField()
    
        def get_additional_field(self, obj):
            return('not important')
    
        class Meta(BasicSerializer.Meta):
            fields = BasicSerializer.Meta.fields + ('additional_field',)
    

    【讨论】:

    • 嘿,我如何处理“不重要”部分才能显示子查询的正确结果?
    • 如果我的BaseSerializer 定义exclude 而不是fields 怎么办?有什么解决办法吗?还是我唯一的选择是用fields 替换它并在那里手动添加所有字段?
    • 恕我直言,这应该作为示例添加到DRF doc
    • 这是完美的,但如果你不想要嵌套字段,请去@anjaneyulubatta505 回答。
    【解决方案2】:

    我们可以这样做

    class AdvandedSerializer(BasicSerializer):
        # ... some code
    
        class Meta:
             model = MyModel
             fields = BasicSerializer.Meta.fields + ('additional_field',)
    

    【讨论】:

    • 如果你不想要嵌套的 json 字段会更干净
    • 而不是这个 fields = BasicSerializer.Meta.fields + ('e_uuid', 'f_uuid')。列表对我有用,而不是元组 fields = EmployerProfileSerializer.Meta.fields + ['e_uuid', 'f_uuid']
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-17
    • 1970-01-01
    • 2017-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多