【问题标题】:django form invalid after setting it up with a valid instance使用有效实例设置后 django 表单无效
【发布时间】: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 返回{}

标签: django django-forms


【解决方案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。它在上次保存时已经过验证。
猜你喜欢
  • 2021-12-25
  • 2013-09-14
  • 2020-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-05
相关资源
最近更新 更多