Django Аннотация не работает в некоторых случаях - PullRequest
1 голос
/ 07 августа 2020

У меня есть набор запросов Django с аннотацией, который хорошо работает при подсчете за год / месяц, но по какой-то причине ОДИН КОД для другой модели не работает.

Код, который работает:

usages = Usage.objects.all()
usages = usages.annotate(year=ExtractYear('usage_datetime'),
                            month = ExtractMonth('usage_datetime')).values('year','month').annotate(total=Count('id'))

Код, который не работает (подсчитывает только 1):

events = Event.objects.all()
events = events.annotate(year=ExtractYear('created'),
                            month = ExtractMonth('created')).values('year','month').annotate(total=Count('id'))

Первый выводит:

Второй не считается, как первый .... не уверен, что это может быть .... Поскольку единственная разница заключается в модели, я предполагаю, что это проблема, поэтому вот мои модели:

models.py

class Event(models.Model):
    name = models.CharField(max_length=255)
    created = models.DateTimeField(auto_now_add=True, editable=False)
    last_updated = models.DateTimeField(auto_now=True, editable=False)
    
    class Meta:
        ordering = ('-created',)

class Usage(models.Model):
    name = models.CharField(max_length=255)
    usage_datetime = models.DateTimeField(auto_now_add=True)

EDIT Вот запрос, который выполняют события

SELECT django_datetime_extract('year', "EventTracker_event"."created", 'UTC') AS "year", 
       django_datetime_extract('month', "EventTracker_event"."created", 'UTC') AS "month", 
       COUNT("EventTracker_event"."id") AS "total" 
  FROM "EventTracker_event" 
 GROUP BY django_datetime_extract('year', "EventTracker_event"."created", 'UTC'), 
       django_datetime_extract('month', "EventTracker_event"."created", 'UTC'), 
       "EventTracker_event"."created" 
 ORDER BY "EventTracker_event"."created" DESC

Созданный по какой-то причине пробивается в группе ....

1 Ответ

1 голос
/ 07 августа 2020

Снятие заказа с модели решило проблему

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