使用有效的实例设置后,django表单无效 [英] django form invalid after setting it up with a valid instance

查看:157
本文介绍了使用有效的实例设置后,django表单无效的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我真的很困惑为什么这个form.is_valid()返回False:



这是我创建的django模型:

  class aModel(models.Model):
some_id = models.IntegerField()

我将模型转换为 ModelForm ,并创建一个 ModelForm 实例与模型的实例。不应该这个 ModelForm 实例有效吗?

 >> > class aModelForm(forms.ModelForm):
... class Meta:
... model = aModel
...
>>> am = aModel.objects.get(id = 1)
>>> for k,v in am .__ dict __。items():print k,v
...
_state< django.db.models.base.ModelState object at 0x1020c8a50>
id 1
some_id 5
>>> form = aModelForm(instance = am)
>>> form.is_valid()
False
>>> am.save()
>>> am.some_id = 6
>>>> am.save()
>>>

为什么表单不正常?我需要做什么来使表单有效?

解决方案

看起来这个表单没有绑定到数据,所以它无法验证。您可以通过在 form.is_valid()之前打印 form.is_bound()进行验证。



如果没有约束,我不认为你可以验证。要绑定数据,您需要为表单的第一个参数添加数据作为字典。

  form = aModelForm({ 'some_id':am.some_id},instance = am)
form.is_valid()

有关详细信息,请参阅 Django - Forms API


I am really confused why this form.is_valid() returns False:

Here is the django model I created:

class aModel(models.Model):
    some_id = models.IntegerField()

I turn the Model into a ModelForm, and create a ModelForm instance with an instance of the Model. Shouldn't this ModelForm instance be valid?

>>> class aModelForm(forms.ModelForm):
...     class Meta:
...             model = aModel
... 
>>> am = aModel.objects.get(id=1)
>>> for k,v in am.__dict__.items(): print k,v
... 
_state <django.db.models.base.ModelState object at 0x1020c8a50>
id 1
some_id 5
>>> form = aModelForm(instance=am)
>>> form.is_valid()
False
>>> am.save()
>>> am.some_id = 6
>>> am.save()
>>> 

Why isn't the form valid? What do I need to do to make the form valid?

解决方案

It looks like this form is not bound to data, so it cannot validate. You can verify by printing form.is_bound() just before form.is_valid() to verify.

If it is not bound, I don't think you can validate. To bind data, you need to add the data as a dictionary for the first argument to the form.

form = aModelForm({'some_id': am.some_id}, instance=am)
form.is_valid()

See Django - Forms API for more details.

这篇关于使用有效的实例设置后,django表单无效的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆