这是我的模型的简化版本:
class Flight(models.Model):
airline = models.CharField(max_length=100)
origin = models.CharField(max_length=4)
destination = models.CharField(max_length=4)
我想做的是通过Flight
对象的某些字段的公共值对对象进行分组,并使用相应的航班计数对组进行注释,如文档here中所述。
当只考虑一个领域时,我知道如何做到这一点。例如,与
Flight.objects.values('airline').annotate(Count('id')).order_by('-id__count')
我得到这样的东西:
[{'airline': 'First Airlines', 'id__count': 21},
{'airline': 'Air Second', 'id__count': 6},
{'airline': 'Third Airways', 'id__count': 3}, ...]
这意味着有 21 个Flight
对象的airline
字段为'First Airlines'
,依此类推。
但是我如何概括来计算多个字段并组合成一个带注释的查询集,将来自不同字段的值视为同一个字段?
例如,假设我有 3 个从洛杉矶到纽约的航班,另外有 2 个回程航班(有 3 个Flight
具有 origin'LAX'
和 destination的对象'JFK'
,以及 2 个Flight
具有 origin'JFK'
和 destination的对象'LAX'
)。我怎样才能得到这个:
[{'airport': 'LAX', 'id__count': 5},
{'airport': 'JFK', 'id__count': 5}]