使用annotate()计算记录不能正常工作

时间:2010-04-30 10:35:09

标签: django annotations

我有两个类:VehicleIssues .... Vehicle对象可以在Issues类中记录多个问题。我想要做的是列出所有问题,每辆车只出现一次,显示的问题总数,加上其他细节....点击记录,然后将用户带到另一个页面,所有这些现在详细显示选定车辆的问题。

我使用annotate尝试了这一点,但我只能访问count和vehicle外键,但Vehicle类中没有其他字段。

class Issues(models.Model):
   vehicle = models.ForeignKey(Vehicle)
   description = models.CharField('Issue Description', max_length=30,)
   type = models.CharField(max_length=10, default='Other')
   status = models.CharField(max_length=12, default='Pending')
   priority = models.IntegerField(default='8', editable=False)
   date_time_added = models.DateTimeField(default=datetime.today, editable=False)
   last_updated = models.DateTimeField(default=datetime.today, editable=False)
   def __unicode__(self):    
     return self.description

我用来注释的代码是:

issues = Issues.objects.all().values('vehicle').annotate(count=Count('id'))

可能是什么问题?

2 个答案:

答案 0 :(得分:1)

我相信你要做的事情,应该反过来询问,像这样:

vehicles = Vehicle.objects.all().annotate(count_issues=Count('issues__pk'))

现在您将拥有一个Vehicle对象的查询集,因此您拥有所有车辆字段。而且你会为每辆车增加一个“count_issues”字段。

修改: 您只需在注释中使用额外列上的过滤器:

vehicles = Vehicle.objects.all().annotate(count_issues=Count('issues__pk')).filter(count_issues__gt=0)

答案 1 :(得分:0)

您已经明确要求仅通过致电values将车辆放入已返回的查询集中,那么为什么在确实是结果时会感到惊讶?