【问题标题】:Django rest framework - model serializer doesn't serialize all fieldsDjango rest框架 - 模型序列化程序不会序列化所有字段
【发布时间】:2019-10-26 01:56:35
【问题描述】:

我正在使用 Django 休息框架 3.7.7

我想序列化一个对象实例,然后反序列化它(无需再次保存到 DB)。 所以我创建了一个继承自 serializers.ModelSerializer 的序列化器。 对于这个模型实例,我有时会使用属性设置器在请求中添加一个不属于模型的字段。我也确实将它添加到了序列化程序中,但是在序列化时 - 我在序列化数据中看不到该字段。

这是模型:

class MyModel(models.Model):

    manager = models.CharField(max_length=200)
    reviewer = models.CharField(max_length=200)

    @property
    def note(self):
        return getattr(self, '_note', None)

    @note.setter
    def note(self, value):
        self._note = value

这是模型序列化器:

class MyModelSerializer(serializers.ModelSerializer):
    note = serializers.CharField(write_only=True, required=False, max_length=1000, allow_null=True)

    class Meta:
        model = MyModel
        fields = [
            'manager',
            'reviewer',
            'note'
        ]

这就是我使用序列化程序的方式:

ser_instance = MyModelSerializer(self.instance)
ser_data = ser_instance.data

似乎ser_instance.data 仅包含模型字段数据(没有“注释”)

【问题讨论】:

    标签: serialization django-rest-framework


    【解决方案1】:

    来自write_only--[DRF-Doc],它指出

    将此设置为 True 以确保在更新或创建实例时可以使用该字段,但在序列化表示时不包括在内。

    默认为 False


    因此,如果您需要序列化 ​​note 字段,请从序列化程序中删除 write_only=true

    #serializers.py
    class MyModelSerializer(serializers.ModelSerializer):
        note = serializers.CharField(required=False, max_length=1000, allow_null=True)  # removed "write_only=True"
        ...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-04
      • 1970-01-01
      • 2013-02-07
      • 2015-09-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-07
      • 2012-11-16
      相关资源
      最近更新 更多