2

在我的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

4

3 回答 3

3

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

于 2012-06-29T11:53:48.757 回答
3

试试这个:

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

你应该再次调用syncdb

于 2012-06-29T11:56:39.120 回答
2

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

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

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

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

话虽如此,您可以通过将 null 选项添加到以下内容来修复错误Alert.a

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

现在,如果您已经运行了该syncdb命令,则需要删除您的表,然后重新运行syncdb以获取此更改。如果此数据库是生产数据库并且您不能这样做,请查看django-south以了解如何迁移您的模式和数据。

于 2012-06-30T21:13:45.097 回答