小编jc3*_*315的帖子

根据条件使用外键计数注释 Django 查询集

这是我的模型的简化版本:

class Airport(models.Model):
    iata = models.CharField()
    name = models.CharField()
    latitude = models.FloatField()
    longitude = models.FloatField()

class Flight(models.Model):
    origin = models.ForeignKey('Airport', related_name='origins')
    destination = models.ForeignKey('Airport', related_name='destinations')
    owner = models.ForeignKey(User)
Run Code Online (Sandbox Code Playgroud)

给定 a User,我想创建一个Airport包含出现在他拥有的对象的origindestination字段中的所有对象的列表Flight,每个对象都用相应数量的Flight对象进行注释。

例如,假设一个用户已经在3个航班:LAX-LHRLHR-CDG,和CDG-JFK。然后我想要一个返回以下对象的查询:

[LHR, id__count=2}, {CDG, id__count=2}, {LAX, id__count=1}, {JFK, id__count=1}]
Run Code Online (Sandbox Code Playgroud)

在上面,三个字母代码代表Airport对象或它们的所有字段。

通常,可能有数千个Users 和数万个Airports 和Flights,所以我正在寻找比使用 for 循环和 if 语句的明显解决方案更有效的方法,最好是在单个数据库查询中。

我目前的进度是这个查询:

Airport.objects.filter(
    Q(origins__owner=user) | Q(destinations__owner=user)
)
.distinct() …
Run Code Online (Sandbox Code Playgroud)

python django django-models django-queryset django-aggregation

3
推荐指数
1
解决办法
2333
查看次数