Подсчет записей с использованием annotate () не работает должным образом - PullRequest
0 голосов
/ 30 апреля 2010

У меня есть два класса: Vehicle и Issues .... у объекта Vehicle может быть несколько проблем, записанных в классе Issues. Я хочу, чтобы у меня был список всех проблем, при этом каждое транспортное средство появлялось только один раз, и отображалось общее количество проблем, а также другие подробности .... щелчок по записи приведет пользователя на другую страницу со всеми проблемы для выбранного транспортного средства показаны подробно сейчас.

Я попробовал это, используя annotate, но я мог получить доступ только к внешнему ключу счетчика и транспортного средства, но не к другим полям в классе 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 ]

1 голос
/ 30 апреля 2010

Я считаю, что то, что вы пытаетесь сделать, следует запрашивать с другой стороны, например:

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

Теперь у вас будет набор запросов объектов Транспортного средства, таким образом, у вас есть все поля транспортного средства. И у вас будет дополнительное поле «count_issues» для каждого транспортного средства.

Редактировать : Вы можете просто использовать фильтр для дополнительного столбца из аннотации:

vehicles = Vehicle.objects.all().annotate(count_issues=Count('issues__pk')).filter(count_issues__gt=0)
0 голосов
/ 30 апреля 2010

Вы специально запросили, чтобы транспортное средство было только в возвращенном наборе запросов посредством вызова на values, так почему вы удивляетесь, когда это действительно результат?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...