我有一個模型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