I have a model similar to the following:
class Review(models.Model):
venue = models.ForeignKey(Venue, db_index=True)
review = models.TextField()
datetime_created = models.DateTimeField(default=datetime.now)
I'd like to query the database to get the total number of reviews for a venue grouped by day. The MySQL query would be:
SELECT DATE(datetime_created), count(id)
FROM REVIEW
WHERE venue_id = 2
GROUP BY DATE(datetime_created);
What is the best way to accomplish this in Django? I could just use
Review.objects.filter(venue__pk=2)
and parse the results in the view, but that doesn't seem right to me.
Just for completeness, since extra() is aimed for deprecation, one could use this approach:
It worked for me in django 1.8, both in sqlite and MySql databases.
Now that
Extra()
is being depreciated a more appropriate answer would use Trunc such as this accepted answerNow the OP's question would be answered as follows
Also you can define custom function:
Just make sure that your DB engine supports DATE function
This should work (using the same MySQL specific function you used):
If you were storing a date field, you could use this:
Because you're storing datetime, it's a little more complicated, but this should offer a good starting point. Check out the aggregation docs here.