在views.py中使用Django Model Form时出错

时间:2012-06-29 11:47:02

标签: django django-models django-forms django-views

在我的models.py

 class Alert(models.Model):

    user = models.CharField(max_length=30, blank=True)
    a = models.IntegerField(blank=True)
    def __unicode__(self):
        return "'%s' at %s" % (self.user)

在我的forms.py中:

 class AlertForm(forms.ModelForm):
    class Meta:
        model=Alert
        fields = ('a','user')
        widgets = {
            'user': forms.HiddenInput()
        }

AlertCountFormset = modelformset_factory(Alert,
                                        form = AlertForm)

在我的views.py中:

def profile_setting(request, slug):
if request.method == 'GET':
    form = AlertForm(request.POST)
    if form.is_valid():
        alert_form = form.save(commit=False)
        alert_form.user = request.user.username
        alert_form.save() # Here i am getting the error
        return HttpResponseRedirect('/user/list')

extra_context = {
    'form': AlertForm()
}
return direct_to_template(request,'users/profile_setting.html',
                          extra_context)

我正在尝试填写Django模型表单,但我正在关注error我在哪里发表评论:

events_alertcount.a may not be NULL
这是什么?即使将null=True放在a字段中,也会显示相同的错误。这是我的forms.py or models.py错误吗?

3 个答案:

答案 0 :(得分:3)

这也是在数据库级别强制执行的。在数据库中设置“a”列以允许该字段为NULL。这应该解决它。 HTH。

答案 1 :(得分:3)

试试这个:

a = models.IntegerField(blank=True, null=True)

你应该再次调用syncdb

答案 2 :(得分:2)

定义模型字段时,blank选项与验证相关,这意味着如果将blank设置为true,则如果未填写该字段,验证将不会失败。

  

blank与验证相关。如果字段有blank=True,则Django管理站点上的验证将允许输入空值。如果字段为blank=False,则该字段为必填字段。

但是,如果验证未失败并且您保存模型,则该字段将持久保存到数据库。现在,除非您将null选项设置为true,否则数据库中的字段不能为null

  

null纯粹与数据库相关,而空白则与验证相关。

话虽如此,您可以通过向Alert.a添加null选项来修复错误:

a = models.IntegerField(blank=True, null=True)

现在,如果您已经运行了syncdb命令,则需要删除表格,然后重新运行syncdb以便获取此更改。如果此数据库是生产数据库而您无法执行此操作,请查看django-south有关如何迁移模式和数据的信息。