Django Rest Framework-模型序列化器不会序列化所有字段

时间:2019-06-11 15:34:45

标签: serialization django-rest-framework

我正在使用Django rest框架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仅包含模型字段数据(不包含“ note”)

1 个答案:

答案 0 :(得分: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"
    ...