2011-03-25 55 views
0

直到幾天前,我一直在使用以下查詢成功。下面的查詢始終返回它應該返回數據:Django:Django QuerySet與日期選擇工作不正常

try: 
    totals = MyObject.objects.get(date=report_date) 
except MyObject.DoesNotExist: 
    return HttpResponse('Could not find totals from %s' % (report_date)) 

,幾天前這個查詢開始返回一個空的QuerySet,即使數據確實爲我請求之日存在。

我從report_date = date.today().strftime('%Y-%m-%d') 或從形式

if request.method == 'POST': 
    form = DateForm(request.POST) 
    if form.is_valid: 
    report_date = request.POST['date'] 

模型得到的日期是簡單的DateField()

class MyObject(models.Model): 
    """Total numbers for a specific day""" 
    date = models.DateField() 
    ... remaining fields ... 

我已經通過shell證實沒有實際上的數據今天在TotalTransactions的日期。我一直使用這個代碼幾個月沒有問題。我昨天通過查詢 totals = MyObject.objects.get(date__gte=report_date, date__lte=report_date) ,但今天早上它不再工作了!今天早上,我然後嘗試原始查詢date=report_date和工作!

所以我的問題是:有沒有人有過這個問題之前?任何人都可以在我的代碼中看到我缺少的東西?有關更多解決方法的任何建議?我感謝你的時間。

+0

我認爲這實際上是一個損壞的數據庫數據的問題。這個查詢太簡單了,不行,今天我會去查看它。 – dm03514 2011-03-25 15:41:08

+0

從你的sql shell或者使用python/django代碼中的原始sql,你能寫一個簡單的查詢來檢索這個日期項嗎? – 2011-03-25 15:57:54

+0

還有一個想法,也許問題是你的語言環境 - 當你有字符串(不是日期對象)系統語言環境很重要 – Jerzyk 2011-03-25 18:27:56

回答

1

爲什麼要轉換爲字符串?你不能控制日期如何轉換,例如。區域設置問題。

開關date對象,並只在視圖中設置:

report_date = date.today() 

,並得到數據從表單的cleaned_data字典:

report_date = form.cleaned_data['date'] 
+0

謝謝,這是更好的做法,我已經嘗試了日期對象和字符串。 – dm03514 2011-03-25 15:48:04

0

,基於日期的查詢工作一天,但不是事實接下來是暗示。我懷疑 - 儘管你沒有顯示足夠的代碼可以肯定 - 你無意中在某處設置了一些默認值,這些默認值在請求中被持久化。

例如,如果你這樣做:

class MyModel(models.Model): 
    my_date_field = model.DateField(default=datetime.date.today()) 

當服務器進程啓動,只要正在運行的進程仍然是相同的字段默認值進行評價 - 這可能是幾天或周。

,如果你做到這一點的看法也是如此:

def my_view(request, date=datetime.date.today()): 
    ... do something with date ... 

因爲視圖參數,再次,是當視圖定義,而不是在執行其評估,因此,該值將保持只要過程存在就一樣。

+0

http://docs.djangoproject.com/en/dev/ref/models/fields/#default如果模型屬於這種情況,您可以傳遞該函數而不是調用它。 '默認= datetime.date.today' – DTing 2011-03-26 09:42:32