Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django:将唯一字段聚集在一起,并计算它们在表中出现的次数_Django_Django Queryset - Fatal编程技术网

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提供更多信息!将阅读您提供的链接!