我有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查询创建一个输出,该查询还将包含e_id=1的所有Q,因此它看起来像这样:
[
{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对象的一些附加,只要它的末尾有一个符合我需要的序列化结果,我可以将其作为JSON对象作为API响应发送
这可以通过如下方式编写
T
序列化程序来完成:这将构建一个
q
字段,该字段表示Q
对象的列表。指定source='e.q_set'
是为了告诉字段在哪里从正在序列化的T
实例中查找那些Q
列表(在本例中,所有Q
都与T
的E
相关)但是您还必须编写另一个
Q
序列化程序,以不显示Q
中的E
(仅根据需要id
和name_q
):如果您计划通过选择相关的
E
对象并从E
预取相关的Q
对象来序列化多个T
对象,则还可以在数据库命中时进行保存:相关问题 更多 >
编程相关推荐