Django rest框架 - 模型序列化程序不会序列化所有字段
Posted
技术标签:
【中文标题】Django rest框架 - 模型序列化程序不会序列化所有字段【英文标题】:Django rest framework - model serializer doesn't serialize all fields 【发布时间】: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
仅包含模型字段数据(没有“注释”)
【问题讨论】:
【参考方案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"
...
【讨论】:
以上是关于Django rest框架 - 模型序列化程序不会序列化所有字段的主要内容,如果未能解决你的问题,请参考以下文章
序列化程序中的django rest框架更新方法,实例不会立即保存
当父记录存在时,如何在 django rest 框架的子序列化程序中设置外键值