Django优化查询

Django优化查询,django,django-models,Django,Django Models,我有一个模型人员,每个人都可以通过人员关系模型链接到另一个人: class Personne(BaseModel): user = models.OneToOneField(User) relations = models.ManyToManyField('self', through='PersonneRelation', symmetrical=False,

我有一个模型
人员
,每个人都可以通过
人员关系
模型链接到另一个人:

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”信息的视图,它非常简单,比如
/person/{id}
。因此,如果您更改
{id}
值,您可以看到另一个人的信息。我需要检查的是:

  • 如果要显示的联系人是
    a
  • 如果要显示的人是联系人。。。一个
    a
现在我正在做一个丑陋的查询,我检查所有的联系人。。。在
A的所有联系人中


您将如何执行优化查询以检查要显示的人是否是联系人。。。如果
用户
可以看到
其他
的信息,则
联系人的
返回
user
other
auth.user
的实例

user.personne.relations.filter(
    Q(user=other) | Q(relations__user=other)
).exists()

你还可以添加你为上述两种情况编写的查询吗?哇,好主意,我会尽快检查