我AirportSerializer有一个字段city,它是ForeignField按设置嵌套的depth=1。我需要序列化程序来返回“机场”的信息和相关的“城市”的信息,因此我需要嵌套对象。问题在于,read_only=True当我将深度设置为1时,设置了“城市”字段,因此该post方法会引发“ not null”错误,因为该字段是必填字段。
我通过设置进行尝试city = CitySerializer(),得到了所需的嵌套结果,但是这种方法意味着一种post方法需要数据来创建新的“机场”和新的“城市”。这不是我想要的。我只希望不设置“城市”字段read_only=True。
该文件说,我必须
创建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获取“ city”字段已经设置为null,因此airport = models.Airport.objects.create(**validated_data)会引发相同的not null错误。
因此,最后,我create()根据文档创建了模型,但是“ city”字段仍为“ read_only”。
我几乎全天都在花时间试图寻找一种方法让序列化程序返回嵌套的“城市”,而无需设置字段“城市” read_only,也无需在过程中强制创建“城市”的新实例。
函数式编程
相关分类