使用有效实例设置后 django 表单无效
Posted
技术标签:
【中文标题】使用有效实例设置后 django 表单无效【英文标题】:django form invalid after setting it up with a valid instance 【发布时间】:2012-12-13 06:53:33 【问题描述】:我真的很困惑为什么这个 form.is_valid() 返回 False:
这是我创建的 django 模型:
class aModel(models.Model):
some_id = models.IntegerField()
我将Model
转换为ModelForm
,并使用Model
的实例创建一个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.errors
返回
【参考方案1】:
这个表单好像没有绑定数据,所以无法验证。您可以通过在form.is_valid()
之前打印form.is_bound()
来验证。
如果没有绑定,我认为你无法验证。要绑定数据,您需要将数据作为字典添加到表单的第一个参数中。
form = aModelForm('some_id': am.some_id, instance=am)
form.is_valid()
更多详情请见Django - Forms API。
【讨论】:
我已经阅读了 Forms API 足够多的内容,但您的简单回答有助于增加洞察力,让一切变得更加清晰。谢谢! 你能详细说明数据应该是什么吗?我不明白为什么它需要我的实例以外的任何东西。 好吧,我假设您正在更新实例的数据。只是简单地获取实例只会将实例分配给 ModelForm,但不会绑定您从请求 POST 更新/验证的数据。当实例没有以任何方式更改时,您不会验证该实例是否符合 ModelForm。它在上次保存时已经过验证。以上是关于使用有效实例设置后 django 表单无效的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 django-storages 将图像上传到亚马逊 S3?在管理员中上传有效,但在网站表单中无效
为啥如果有一个无效的字段,需要有效的表单 2 次才能获得有效的下一个字段?