在django查询

时间:2011-04-07 07:51:17

标签: database django postgresql django-views

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

编辑:

来自我的帖子的修改。我需要做一年,我没有具体的开始日期和结束日期。无论出现的天数如何,我都需要设定一年中的月份范围。我的数据库看起来像这样:

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

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

3 个答案:

答案 0 :(得分: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

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()

答案 1 :(得分:1)

收到您的范围后,请使用以下内容查询您的模型:

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

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

答案 2 :(得分:0)

最好的方法是通过raw sql

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