2011-04-07 78 views
0

我已经在日期中存储了关于日期的数据,即可能有多个条目在同一个月,但是当我检索它们时,我需要将它们作为组合结果。因此,无论如何,我可以查询它来检索一个月的数据,该月份在django(view)中将范围设置为月。在Django中查询

编辑:从我的上一个职位

修改。我需要做一年,我没有具体的开始日期和结束日期。无论出席天数多少,我都需要在一年内将范围设置为几个月。我的数据库看起来是这样的:

date  count1  count2 
2011/12/01, 12,   3 
2011/12/03, 3,   6 

现在我需要检索count1为12月。我需要一个通用查询,而不仅仅是特定的月份,比如30或31或28天。

+1

告诉我们您的模型,以便我们能够帮助 – tiagoboldt 2011-04-07 07:57:32

+0

你不应该使用编辑会问一个新问题。如果问题得到解答,请将其标记为已回答并发布新问题。也可以尝试在问题标题中更具体。 “在Django中查询”并不告诉人们你正在寻找范围查询。输入具体的问题标题还可以帮助您确定您要问的问题是否曾经被问过。 – DTing 2011-04-07 19:06:27

+0

@ kriegar它没有什么不同的问题。我只是尝试添加更多的细节。 – Rathin 2011-04-08 04:04:27

回答

1

后您收到的范围,查询你有以下型号:

YouModel.objects.filter(date__gt='initial date').filter(date__lt='final date') 

日期应该是在模型中的字段。 __gt和__lt aply是过滤器,用于字段搜索大于和小于传递参数的值。

+0

gte和lte可能更适合日期,除非你想计算一天之前和之后的一天。 – DTing 2011-04-07 08:07:43

3

docs

假设你有一个的DateField

class MyModel(models.Model): 
    my_date = models.DateField() 

查询:

import datetime 
startdate = datetime.date(...start of some month...) 
enddate = datetime.date(...end of some month...) 
my_model_in_range = MyModel.objects.filter(my_date__range(startdate,enddate)) 

编辑:

count docs

012做
import datetime 

def first_day_of_month(month, year): 
    return datetime.date(year, month, 1) 

def last_day_of_month(month, year): 
    return datetime.date(year, month+1, d.day) - datetime.timedelta(1) 

# if you want query for jan 2009: month = 1, year = 2009 

first = first_day_of_month(1, 2009) 
last = last_day_of_month(1, 2009) 

objects_in_jan_2009 = MyModel.objects.filter(my_date__range(first, last)) 

count = objects_in_jan_2009.count() 
0

最好的办法是通过原始SQL

 
YourModel.objects.extra(
     select={'values':'select sum(count) as count , extract(month from mymodel_db.date) as date group by date'}