我有一个模型Personne
,每个人都可以通过PersonneRelation
模型与另一个人相关联:
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
的联系人的联系人?
答案 0 :(得分:0)
如果True
可以看到user
的信息,则返回other
。 user
和other
是auth.User
的实例。
user.personne.relations.filter(
Q(user=other) | Q(relations__user=other)
).exists()