我有两个类:Vehicle
和Issues
.... 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'))
可能是什么问题?
答案 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
将车辆放入已返回的查询集中,那么为什么在确实是结果时会感到惊讶?