我有一个模型Personne
每个人可以通过PersonneRelation
模型被链接到另一个人:Django的优化查询
class Personne(BaseModel):
user = models.OneToOneField(User)
relations = models.ManyToManyField('self', through='PersonneRelation',
symmetrical=False,
related_name='personne_relations')
class PersonneRelation(BaseModel):
type_relation = models.IntegerField(
choices=[(a, b) for a, b in list(PersonneEnums.TAB_RELATIONS.items())],
default=PersonneEnums.RELATION_FRIEND)
src = models.ForeignKey('Personne', related_name='relation_src')
dst = models.ForeignKey('Personne', related_name='relation_dst')
is_reverse = models.BooleanField(default=False)
所以,想象一个人A
。他有一个联系人B
。我的客户希望我显示B
的所有联系人,以便A
可能能够向这些联系人发送消息。挺容易。问题是我已经提出了一个显示“人员”信息的视图,它非常简单,如/person/{id}
。因此,如果您更改{id}
值,则可以查看其他人员信息。我需要检查的是:
- 如果以显示人的
A
- 联系人如果显示该人是接触...的接触
A
现在我正在做一个丑陋的查询,我检查所有的联系人的所有联系人...所有的联系人的A
。
你将如何做一个优化的查询,以检查是否显示的人是联系人的联系人的联系人的A
?
您还可以添加您为上述两种情况编写的查询吗? – AKS