2011-04-07 76 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'}