Django Queryset - 仅从查询中的datetime字段中提取日期(在.value()内)

时间:2013-08-27 05:06:22

标签: django django-models django-queryset

我想从django query

中提取一些特定的列

models.py

class table
  id = models.IntegerField(primaryKey= True)
  date = models.DatetimeField()
  address = models.CharField(max_length=50)
  city = models.CharField(max_length=20)
  cityid = models.IntegerField(20)

这是我目前用于查询的内容

obj = table.objects.filter(date__range(start,end)).values('id','date','address','city','date').annotate(count= Count('cityid')).order_by('date','-count')

我希望有一个类似于

的SQL查询
 select DATE(date), id,address,city, COUNT(cityid) as count from table where date between "start" and "end" group by DATE(date), address,id, city order by DATE(date) ASC,count DESC;

2 个答案:

答案 0 :(得分:17)

至少在Django 1.10.5中,你可以使用这样的东西,没有extraRawSQL

from django.db.models.functions import Cast
from django.db.models.fields import DateField
table.objects.annotate(date_only=Cast('date', DateField()))

对于过滤,您可以使用date查找(https://docs.djangoproject.com/en/1.11/ref/models/querysets/#date):

table.objects.filter(date__date__range=(start, end))

答案 1 :(得分:5)

对于以下情况。

select DATE(date), id,address,city, COUNT(cityid) as count from table where date between "start" and "end" group by DATE(date), address,id, city order by DATE(date) ASC,count DESC;

您可以使用extra来实现数据库功能。

Table.objects.filter(date__range(start,end)).extra(select={'date':'DATE(date)','count':'COUNT(cityid)'}).values('date','id','address_city').order_by('date')

希望它会对你有所帮助。

感谢。