2013-02-07 42 views
2

看起來很常見的問題,但在這裏的其他問題中建議的補救措施似乎不適用於我。Django DateField not null null

我通過html表單提交了一些日期,有些不是必需的,可以是空白的。但是我得到的錯誤

[u'Enter a valid date in YYYY-MM-DD format.'] 

下面是我的模型文件

class ProjectM(models.Model): 
    order_received = models.DateField(null=True,blank=True) 

MySQL數據庫

Field     | Type   | Null | Key | Default | Extra 
order_received   | date   | YES |  | NULL |     

所以我的理解是,我應該將其設置爲True空並在模型文件中留空,並確保在我的MySQL數據庫中,我允許NULL。但是,我仍然得到上面提到的驗證錯誤,當我檢查這個特定字段的POST數據中的值時,它是''。我試圖更改生成的html中的值來檢查空字段並將值設爲'null',但這似乎也不起作用。

任何幫助,將不勝感激:)

更新:@Cathy,這裏是模式代碼來說明問題。我省略了一些與問題完全無關的代碼,並簡化了一些代碼。基本上我正在構建一個小型數據庫Web前端,它只是將記錄拉出,以表格形式顯示在表單中,並允許您編輯和更新記錄。它會取消空白日期字段罰款,但不會讓我更新。

模板

{% for record in records %} 
<form method="post" action=""> 
<tr> 
<td><input type="submit" value="{{ record.id }}" name="submit"></td> 
<td><input type="text" value="{{ record.pm }}" name="pm"></td> 
<td><input type="text" value="{{ record.spec }}" name="spec"></td> 
<td><input type="date" value="{{ record.order_received|date:"Y-m-d" }}" name="order_received"></td> 
</tr> 
</form> 
{% endfor %} 

模型

class ProjectM(models.Model): 
    pm = models.CharField(max_length="200") 
    spec = models.CharField(max_length="200") 
    order_received = models.DateField(null=True,blank=True) 

查看

def all(request): 
    if request.method == 'POST': 
     id = request.POST['submit'] 
     pm = request.POST['pm'] 
     spec = request.POST['spec'] 
     order_received = request.POST['order_received'] 
     if not order_received: 
      order_received = 'None' 
     update = ProjectM.objects.get(pk=int(id)) 
     update.pm = pm 
     update.spec = spec 
     update.order_received = order_received 
     update.save() 

更新模板代碼

{% if record.order_received %} 
<td> 
    <div class="styled-dateentered"> 
    <input class="entered" name='order_received{{ record.id }}' id="order_received{{ record.id }}" type="date" value="{{ record.order_received|date:"Y-m-d" }}"> 
    </div> 
</td> 
{% else %} 
<td> 
    <div class="styled-datenotentered"> 
    <input class="notentered" id="order_received{{ record.id }}" name="order_received{{ record.id }}" type="date" value="None"> 
    </div> 
</td> 
{% endif %} 

我希望這有助於。我非常感謝幫助。

感謝

+0

在該字段中輸入「required = False」 – catherine

+2

你的表單看起來像什麼 – Charl

+0

我的表單很基本,讓我們來說一下這樣的

,它從數據庫中提取一個日期並顯示它,如果有的話。否則,它顯示dd/mm/yyyy,但該值設置爲「'。如果我選擇一個日期並更新它的工作,但如果我更新離開字段空白我得到的錯誤。 – dlyxzen

回答

2

如果您使用的是ModelForm至極代表這種模式ProjectM,例如:

class ProjectMForm(ModelForm): 
    class Meta: 
     model = ProjectM 

你不應該有任何問題,但可以肯定你沒有在一個領域此表格稱爲order_received,在此form中沒有required=False參數。如果你想有一個這個名字的字段,你應該這樣做:order_received = forms.DateField(required=False)

+0

謝謝你的迴應。我實際上並沒有使用構建的django表單來創建我的表單,所以我沒有ModelForm信息。我通過POST將數據傳遞給我的視圖。當我查看回溯時,POST ['order_received']確實是空的。它需要是NULL值還是隻是一個空字符串?再次感謝 – dlyxzen

+0

我放棄了我的數據庫,並用Django重新同步了我的數據庫,但似乎仍然遇到了問題。有沒有一種方法可以簡單地關閉Django中的表單驗證?我並不需要說實話。 – dlyxzen

+0

我注意到你正在使用'POST'方法,並且你的窗體中沒有'{%csrf_token%}'。 –