我正在尝试创建一个旅行监控应用程序,而每次旅行都会获得一张票,特定的出发地和目的地。我现在要做的是,给定一个日期范围,我想知道为唯一的始发地 - 目的地对进行了多少次旅行。
我还没有找到解决方案,我希望有人能在这方面给我启发。
这是我的模特:
class Location(models.Model)
name = models.Charfield(max_length=50, unique=True)
...
class Trip(models.Model):
ticket = models.PositiveIntegerField(primary_key=True, blank=False, null=False)
origin = models.ForeignKey(Location, on_delete=models.CASCADE)
destination = models.ForeignKey(Location, on_delete=models.CASCADE)
...
我期待以下输出,我目前不知道该怎么做:
Origin | Destination | Number of Trips
Place #1 | Place #2 | 5
Place #2 | Place #1 | 3
Place #3 | Place #1 | 8
Place #3 | Place #2 | 1
答案 0 :(得分:0)
尝试:
query = Trip.objects.values('origin', 'destination').annotate(count=Count('pk'))
for trip in query:
print(trip['origin'], trip['destination'], trip['count'])
如果您想获取位置的名称而不是ID:
query = Trip.objects.values('origin__name', 'destination__name').annotate(count=Count('pk'))
for trip in query:
print(trip['origin__name'], trip['destination__name'], trip['count'])
这在Django文档中称为aggregation
,您可以在那里找到更多示例:
https://docs.djangoproject.com/en/2.0/topics/db/aggregation/
答案 1 :(得分:0)
让我发表评论的答案......
Trip.objects.values('origin', 'destination').distinct().annotate(trips=Count('origin'))