doz*_*oza 48 python django django-models django-queryset django-1.1
我有一个类似于以下的模型:
class Review(models.Model):
venue = models.ForeignKey(Venue, db_index=True)
review = models.TextField()
datetime_created = models.DateTimeField(default=datetime.now)
Run Code Online (Sandbox Code Playgroud)
我想查询数据库以获得按天分组的场地的评论总数.MySQL查询将是:
SELECT DATE(datetime_created), count(id)
FROM REVIEW
WHERE venue_id = 2
GROUP BY DATE(datetime_created);
Run Code Online (Sandbox Code Playgroud)
在Django中实现这一目标的最佳方法是什么?我可以用
Review.objects.filter(venue__pk=2)
Run Code Online (Sandbox Code Playgroud)
并在视图中解析结果,但这对我来说似乎不对.
ara*_*818 88
这应该工作(使用您使用的相同的MySQL特定功能):
Review.objects.filter(venue__pk=2)
.extra({'date_created' : "date(datetime_created)"})
.values('date_created')
.annotate(created_count=Count('id'))
Run Code Online (Sandbox Code Playgroud)
avi*_*kam 15
仅仅为了完整性,因为extra()旨在弃用,可以使用这种方法:
from django.db.models.expressions import DateTime
Review.objects.all().\
annotate(month=DateTime("timestamp", "month", pytz.timezone("Etc/UTC"))).\
values("month").\
annotate(created_count=Count('id')).\
order_by("-month")
Run Code Online (Sandbox Code Playgroud)
它在django 1.8中适用于我,包括sqlite和MySql数据库.
Ant*_*lin 12
现在Extra()
正在折旧,更合适的答案会使用Trunc,例如这个已接受的答案
现在OP的问题将回答如下
from django.db.models.functions import TruncDay
Review.objects.all()
.annotate(date=TruncDay('datetime_created')
.values("date")
.annotate(created_count=Count('id'))
.order_by("-date")
Run Code Online (Sandbox Code Playgroud)
Zac*_*ach 11
如果您要存储日期字段,可以使用以下命令:
from django.db.models import Count
Review.objects.filter(venue__pk = 2)
.values('date').annotate(event_count = Count('id'))
Run Code Online (Sandbox Code Playgroud)
因为你正在存储日期时间,所以它有点复杂,但这应该是一个很好的起点.在这里查看聚合文档.
归档时间: |
|
查看次数: |
19039 次 |
最近记录: |