在我的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
错误吗?
答案 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有关如何迁移模式和数据的信息。