2013-04-02 32 views
0

一個隨機問題,但生病的位盡我所能來描述我試圖做什麼。我正在構建一個應用程序來管理一系列借出的實物資產。Django從視圖中擦除datefield值

要返回的資產用戶訪問/返回/ 1 /從而清除用戶,日期借來的名稱,返回日期等

view.py

def returnlaptop(request, laptop_pk): 
     Laptops.objects.filter(pk=laptop_pk).update(laptop_status='In') 
     Laptops.objects.filter(pk=laptop_pk).update(user='') 
     Laptops.objects.filter(pk=laptop_pk).update(borrowed_date='') 
     Laptops.objects.filter(pk=laptop_pk).update(return_date='') 
     return HttpResponseRedirect('/') 

這種運作良好,除了當我嘗試更新的值在models.datefield

[U「」'值無效的日期格式。它必須是YYYY-MM-DD格式。」]

反正是有AR回答這個?或者我是否完全錯誤的方式?

乾杯 XCOM

回答

0

我不是100%肯定,但我認爲訪問數據庫的4倍......

的第一個問題是,update是爲在查詢集使用。您正在過濾主鍵,因此您只返回1個對象。這意味着你應該使用get,而不是像這樣

laptop = Laptops.objects.get(pk=laptop_pk) 

,現在你可以用它來正確地從數據庫中讀取對象,修改它,並保存它,像這樣

laptop = Laptops.objects.get(pk=laptop_pk) 
laptop.laptop_status = 'In' 
laptop.user = '' 
... 
laptop.save() 

這不僅會一次打到數據庫。

最後一個問題是您試圖將日期設置爲空字符串。這不會工作,因爲它期待一個日期對象。你可以做的一件事是修改你的模型,以便日期可以是空白的,以便數據庫接受空值。

class Laptops(models.Model): 
    ... 
    borrowed_date = models.DateField(null=True, blank=True) 
    return_date = models.DateField(null=True, blank=True) 

你能做的就是用最小的日期其他的事情可以用timezone.datetime.min

+0

感謝Ngenator訪問, 我做了以下修改都無濟於事:( [U「'價值有「] – xc0m

+0

@ xc0m您不能將其設置爲空字符串,請嘗試'None'或'timezone.datetime.min'。 – Ngenator