Количество количества записей по дате в Django

У меня есть модель, подобная следующему:

class Review(models.Model):
    venue = models.ForeignKey(Venue, db_index=True)
    review = models.TextField()  
    datetime_created = models.DateTimeField(default=datetime.now)

Я хотел бы запросить базу данных для получения общего количества обзоров для места проведения, сгруппированного днем. Запрос MySQL был бы:

SELECT DATE(datetime_created), count(id) 
FROM REVIEW 
WHERE venue_id = 2
GROUP BY DATE(datetime_created);

Что лучший способ состоит в том, чтобы выполнить это в Django? Я мог просто использовать

Review.objects.filter(venue__pk=2)

и проанализируйте результаты в представлении, но это не кажется правильным мне.

48
задан Serjik 18 December 2015 в 22:50
поделиться

2 ответа

Это должно работать (используя ту же функцию MySQL, которую вы использовали):

Review.objects.filter(venue__pk=2)
    .extra({'date_created' : "date(datetime_created)"})
    .values('date_created')
    .annotate(created_count=Count('id'))
88
ответ дан 7 November 2019 в 12:11
поделиться

Если вы сохраняли поле даты, вы могли бы использовать это:

from django.db.models import Count

Review.objects.filter(venue__pk = 2)
    .values('date').annotate(event_count = Count('id'))

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

11
ответ дан 7 November 2019 в 12:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: