这是我的模型的简化版本:
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包含出现在他拥有的对象的origin或destination字段中的所有对象的列表Flight,每个对象都用相应数量的Flight对象进行注释。
例如,假设一个用户已经在3个航班:LAX-LHR,LHR-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