使用有效的实例设置后,django表单无效 [英] django form invalid after setting it up with a valid instance
问题描述
这是我创建的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屋!