gpt4 book ai didi

Django 优化查询

转载 作者:行者123 更新时间:2023-12-02 04:43:04 24 4
gpt4 key购买 nike

我有一个模型 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 可以向那些联系。满容易。问题是我创建了一个显示“人员”信息的 View ,它非常简单,例如 /person/{id}。因此,如果您更改 {id} 值,您可以看到另一个人的信息。我需要检查的是:

  • 如果要显示的人是A的联系人
  • 如果要显示的人是联系人...A

现在我正在做一个丑陋的查询,我检查所有联系人... A 的所有联系人。

您将如何进行优化查询以检查要显示的人是否是联系人...A 的联系人?

最佳答案

返回True,如果user可以看到other的信息。 userotherauth.User 的实例。

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

关于Django 优化查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35856729/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com