假设我有这样的模型:
class A(models.Model):
...some fields here
class B(models.Model):
...some fields here
a = models.ForeignKey(A, on_delete=CASCADE)
class C(models.Model):
...some fields here
b = models.ForeignKey(B, on_delete=CASCADE)
...
我希望我的API端点返回如下内容
{
...some fields here
b: [
{
...some field here
c: [{...}, {...} ...]
},
{
...some field here
c: [{...}, {...} ...]
}
...
]
}
我知道我可以做这样的事情:
class Bserializer(serializers.ModelSerializer):
c = Cserializer(source="c_set", many=True, read_only=True,)
class Meta:
model = B
fields = [...some fields, "c"]
class Aserializer(serializers.ModelSerializer):
b = Bserializer(source="b_set", many=True, read_only=True,)
class Meta:
model = A
fields = [...some fields, "b"]
但是,如果这一点更深入或者模型有更多的外键,它就会变得非常复杂。是否有一种方法可以递归地添加引用模型的所有实例
您可以在serializer
Meta
类中指定depth
值,但是,如果您想自定义嵌套数据的任何部分,这将不起作用,因为这将自动为嵌套关系创建模型序列化程序(包含所有字段)。检查文档here底线是,如果没有对嵌套序列化程序进行任何自定义,请使用它,否则,请为每个关系使用自定义序列化程序。但我建议将嵌套数据保持在最低限度,因为这会影响性能
相关问题 更多 >
编程相关推荐