在views.py中使用Django模型表单时出错
在my models.py中在views.py中使用Django模型表单时出错,django,django-models,django-forms,django-views,Django,Django Models,Django Forms,Django Views,在my 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) 在My forms.py中: class AlertForm(forms.Mod
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)
在My forms.py中:
class AlertForm(forms.ModelForm):
class Meta:
model=Alert
fields = ('a','user')
widgets = {
'user': forms.HiddenInput()
}
AlertCountFormset = modelformset_factory(Alert,
form = AlertForm)
在my 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模型表单,但在我的注释处出现以下错误:
events_alertcount.a may not be NULL
这是什么?即使在a字段中输入NULL=True,它也会显示相同的错误。我的forms.py或models.py是否有问题?这也是在数据库级别强制执行的。将数据库中的a列设置为允许该字段为空。这应该可以解决它。嗯。试试这个:
a = models.IntegerField(blank=True, null=True)
并且您应该再次调用SyCDB
< P>定义模型字段时,空白选项是与验证相关的,这意味着如果将空白设置为true,则如果未填写该字段,则验证不会失败。 空白是与验证相关的。如果字段为blank=True,Django管理站点上的验证将允许输入空值。如果某个字段的值为blank=False,则该字段为必填字段 但是,如果验证没有失败并且您保存了模型,那么该字段将被持久保存到数据库中。现在,数据库中的字段不能为null,除非将null选项设置为true null纯粹与数据库相关,而blank与验证相关 话虽如此,您可以通过将null选项添加到Alert来修复错误。a:现在,如果您已经运行了syncdb命令,则需要删除表,然后重新运行syncdb,以便进行此更改。如果此数据库是生产数据库,而您不能这样做,请研究如何迁移架构和数据。我没有找到您。你要我这么做吗?a=models.IntegerFieldblank=True,null=True?是的,你必须在“a”上声明这个。如果在没有null=True的情况下运行syncdb,则db会将字段设置为不接受null作为值。因此,您必须更改db列以接受NULL作为值。您还可以删除数据库表,并在将a更改为a=models.IntegerFieldblank=True,null=True后再次运行syncdb。但是,当表中已经填充了您的数据时,请在删除表之前进行备份。syncdb不会更改现有的db表!您的视图代码片段中也有一个错误,这并不重要。但您正在再次检查请求,并从POST获取表单。
a = models.IntegerField(blank=True, null=True)