У меня есть модель, подобная следующему:
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)
и проанализируйте результаты в представлении, но это не кажется правильным мне.
Это должно работать (используя ту же функцию MySQL, которую вы использовали):
Review.objects.filter(venue__pk=2)
.extra({'date_created' : "date(datetime_created)"})
.values('date_created')
.annotate(created_count=Count('id'))
Если вы сохраняли поле даты, вы могли бы использовать это:
from django.db.models import Count
Review.objects.filter(venue__pk = 2)
.values('date').annotate(event_count = Count('id'))
Поскольку вы храните дату и время, это немного сложнее, но это должно предлагают хорошую отправную точку. Ознакомьтесь с документацией по агрегированию здесь .