【发布时间】:2021-11-16 08:11:58
【问题描述】:
我有 3 个模型 T、E、Q,这样:
class E(Model):
name_e = CharField()
class T(Model):
name_t = CharField()
e = ForeignKey(E)
class Q(Model):
name_q = CharField()
e = ForeignKey(E)
我也有每个序列化器:
class ESerializer(ModelSerializer):
class Meta:
model = E
fields = '__all__'
class TSerializer(ModelSerializer):
e = ESerializer()
class Meta:
model = T
fields = '__all__'
class QSerializer(ModelSerializer):
e = ESerializer()
class Meta:
model = Q
fields = '__all__'
对于一个 E 行,可以有多个 T 行和 Q 行。 我可以这样查询
t = T.objects.filter(e__id=1).all()
serialized_t = TSerializer(t, many=True).data
serialized_t 的输出将类似于:
[
{id:7, name_t:'test_1', e:{id:1, name_e:'ename_1'}},
{id:9, name_t:'test_2', e:{id:1, name_e:'ename_1'}}
]
我的问题是如何组合它,以便我可以在上面的查询中包含 Q 来为 T 查询创建输出,该输出还包括所有 Q 的 e_id=1,因此它看起来像这样:
[
{id:7, name_t:'test_1', e:{id:1, name_e:'ename_1'}, q:[{id:4, name_q:'qname_1'}, {id:5, name_q:'qname_2'}]},
{id:9, name_t:'test_2', e:{id:1, name_e:'ename_1'}, q:[{id:4, name_q:'qname_1'}, {id:5, name_q:'qname_2'}]}
]
我不介意这是否可以在查询本身中完成,或者它是否涉及对 SerializedT 对象的一些附加,只要我在它的末尾有一个符合我可以发送的需要的序列化结果作为 API 响应的 JSON 对象。
【问题讨论】:
标签: python django django-models django-rest-framework django-queryset