Django:将唯一字段聚集在一起,并计算它们在表中出现的次数
我正在尝试创建一个行程监控应用程序,而每次行程都有一张车票以及特定的出发地和目的地。我现在想做的是,给定一个日期范围,我想知道对于唯一的起点-终点对,有多少次旅行 我还没有找到解决这个问题的办法,我希望有人能给我一些启发 这是我的模型:Django:将唯一字段聚集在一起,并计算它们在表中出现的次数,django,django-queryset,Django,Django Queryset,我正在尝试创建一个行程监控应用程序,而每次行程都有一张车票以及特定的出发地和目的地。我现在想做的是,给定一个日期范围,我想知道对于唯一的起点-终点对,有多少次旅行 我还没有找到解决这个问题的办法,我希望有人能给我一些启发 这是我的模型: class Location(models.Model) name = models.Charfield(max_length=50, unique=True) ... class Trip(models.Model): ticket
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
尝试:
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文档中称为聚合
,您可以在这里找到更多示例:
让我把评论中的答案贴出来
Trip.objects.values('origin', 'destination').distinct().annotate(trips=Count('origin'))
Trip.objects.values('origin','destination').distinct().annotation(trips=Count('origin'))
?谢谢@art06!很有魅力!!感谢@JoseKilo提供更多信息!将阅读您提供的链接!