Django DateField不允许null

时间:2013-02-07 05:03:22

标签: django forms date null models

似乎是一个常见的问题,但是在这里的其他问题中提出的补救措施似乎对我没有用。

我通过html表单提交一些日期,有些不是必需的,可以是空白的。但是我收到了错误

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

以下是我的模型文件

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

MySQL DB

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

所以我理解它的方式,我应该将它设置为True为null并且在模型文件中为空,并确保在我的mysql DB中我允许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 %}

我希望这会有所帮助。我非常感谢你的帮助。

由于

1 个答案:

答案 0 :(得分:2)

如果您使用ModelForm代表此模型ProjectM,例如:

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

你不应该有任何问题,但请确保你没有这个名为order_received的表单中的字段,而required=False中没有form个参数。如果您想拥有一个具有此名称的字段,请执行以下操作:order_received = forms.DateField(required=False)