【问题标题】:How can I include fields from Base serializer in django rest framework?如何在 django rest 框架中包含来自 Base 序列化程序的字段?
【发布时间】:2015-05-15 10:35:45
【问题描述】:

我有这个代码

class BaseSerializer(serializers.ModelSerializer):
    unicode = serializers.SerializerMethodField('get_unicode')
    class Meta:
        fields=('unicode',)

    def get_unicode(self):
        return 'test'

我希望 Base 序列化程序中的所有字段都出现在它的所有子类中

class EntrySerializer(BaseSerializer):
    class Meta:
        model = models.Entry
        fields = ('id', 'start_time', 'end_time')

但输出中不包含 unicode

Base Serializer 中添加的所有字段有什么方法可以获取 自动附加到子类,无需手动添加名称。 我只想保留 Base 中所有类中的公共字段

【问题讨论】:

  • 对我来说,我将“unicode”字段附加到 EntrySerializer 字段。由于子类字段会覆盖基类字段,所以你的 unicode 字段就消失了。
  • EntrySerializer 中的字段被覆盖,在 EntrySerializer 的字段中添加 unicode
  • @GeoJacob ,有什么方法可以让 Base Serializer 中添加的所有字段自动附加到子类中,而无需手动添加名称。我只想保留 Base 中所有类中的公共字段

标签: python django django-rest-framework


【解决方案1】:

您可以将 BaseSerializer 的 Meta.fields 添加到 EntrySerializer 的 Meta.fields 中:

class EntrySerializer(BaseSerializer):
    class Meta:
        model = models.Entry
        fields = ('id', 'start_time', 'end_time') + \
            BaseSerializer.Meta.fields

注意: BaseSerializer 必须是序列化程序的子类(或具有属性_declared_fields)。否则字段unicode 将not be found(配置不当的异常)。

【讨论】:

    【解决方案2】:

    你可以这样做。它将包括基本序列化程序的所有字段。

    class EntrySerializer(serializers.Modelserializer):
        base= BaseSerializer()
        class Meta:
            model = models.Entry
            fields = ('base','id', 'start_time', 'end_time')
    

    【讨论】:

      猜你喜欢
      • 2015-03-12
      • 1970-01-01
      • 2013-02-07
      • 2015-07-20
      • 1970-01-01
      • 2014-06-24
      • 1970-01-01
      • 2014-11-25
      • 1970-01-01
      相关资源
      最近更新 更多