Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在views.py中使用Django模型表单时出错_Django_Django Models_Django Forms_Django Views - Fatal编程技术网

在views.py中使用Django模型表单时出错

在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

在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.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)