我的AirportSerializer
有一个字段city
,这是一个通过设置depth=1
嵌套的ForeignField
。我需要序列化程序返回“Airport”和相关“City”的信息,所以我需要嵌套这些对象。问题是当我将depth设置为1时,字段'city'被设置为read_only=True
,因此post
方法会产生一个“not null”错误,因为该字段是必需的。在
我尝试设置city = CitySerializer()
,得到了我需要的嵌套结果,但是这种方法意味着post
方法需要数据来创建新的“机场”和新的“城市”。这不是我想要的。我只希望字段'city'不被设置read_only=True
。在
documentation说我必须
create
create()
and/orupdate()
methods in order to explicitly specify how the child relationships should be saved
我试过用这个序列化程序:
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
的de'city'字段已经设置为null
,因此airport = models.Airport.objects.create(**validated_data)
会产生相同的not null
错误。在
因此,最后,我根据文档创建了create()
模型,但是“city”字段仍然是“read-only”。在
我花了几乎一整天的时间试图让序列化程序返回一个嵌套的“city”,而不设置字段“city”read_only
,并且在此过程中不强制创建一个新的“city”实例。在
我会很感激你的帮助。在
嵌套序列化是很棘手的,在定义序列化程序时,是否要创建或设置嵌套对象存在一些模糊性。我用不同的方法处理过。在
只需使用外键,您将使前端成为http 请求数据,但最终这是最惯用的方式 做这件事。
在AirportSerializer中使用CitySerializer让它被读取 只有。有一个只写城市的id字段,只与id相关 关于写作。
get_serializer_class
方法中执行哪一个示例:
相关问题 更多 >
编程相关推荐