【发布时间】:2018-06-21 21:06:53
【问题描述】:
我的AirportSerializer 有一个字段city,即通过设置depth=1 嵌套的ForeignField。我需要序列化器返回“机场”的信息和相关的“城市”的信息,所以我需要嵌套对象。问题是当我将深度设置为 1 时,字段“城市”设置为 read_only=True,因此 post 方法会引发“非空”错误,因为该字段是必需的。
我尝试通过设置city = CitySerializer(),得到我需要的嵌套结果,但这种方法意味着post 方法需要数据来创建新的“机场”和新的“城市”。这不是我想要的。我只想不设置字段“城市”read_only=True。
documentation 说我必须这样做
创建
create()和/或update()方法以显式地 指定应如何保存子关系
我用这个序列化器试过这个:
class AirportSerializer(serializers.ModelSerializer):
class Meta:
model = models.Airport
fields = ('id', 'city', 'name', 'iata')
depth = 1
def create(self, validated_data):
airport = models.Airport.objects.create(**validated_data)
return airport
但是validated_data 的“城市”字段已经设置为null,所以airport = models.Airport.objects.create(**validated_data) 引发了同样的not null 错误。
所以,最后,我按照文档创建了create() 模型,但“城市”字段仍然是“只读”。
我几乎花了一整天的时间试图找到一种方法让序列化程序返回嵌套的“城市”而不设置字段“城市”read_only 并且没有在过程中强制创建“城市”的新实例.
我将不胜感激。
【问题讨论】:
标签: python django django-rest-framework