每年到达人数列表



我有这三个模型(我对它们进行了总结(:

class Tourist(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
class Etablissement(models.Model):    
name = models.CharField(max_length=30)
class Arrival(models.Model):
tourist = models.ForeignKey(Tourist, on_delete=models.CASCADE)
place = models.ForeignKey(Etablissement, on_delete=models.CASCADE)

作为一名游客,我希望每年都有他所有的游客。我试过这个:

def detailTourist(request, id):
touriste = Tourist.objects.get(id=id)
datas = Arrival.objects.annotate(year=TruncYear('arrival_date')).values('year').annotate(total=Arrival.objects.filter(tourist=touriste)).order_by()

但它给了我一个错误:sub-select返回19列-预期为1(到达模型有19个字段,所以我很抱歉,这就是它说19的原因。

芬纳利,我该怎么做?

您可以使用itertools.groupby(…)[Python doc]对项目进行分组,因为它已经按年份订购:

from itertools import groupby
from operator import attrgetter

def detailTourist(request, id):
datas = Arrival.objects.annotate(year=TruncYear('arrival_date')).order_by('year')
datas = { y: list(vs) for y, vs ingroupby(datas, attrgetter('year'))}
# …

在这里,它将创建一个字典,将一年映射到Arrival对象的列表。

相关内容

  • 没有找到相关文章

最新更新