将未绑定的表单转换为绑定的表单?

时间:2012-01-24 20:35:58

标签: django django-forms

我希望从对象获得绑定表单以使用is_valid方法。原因是我有一些旧数据,我希望用户根据新的验证规则进行更正。然后,我想在我的表单中重用clean方法的代码。

我最终序列化了我的回复:

from django.utils import simplejson
from django.core.serializers import serialize

(...)

fields_dict = simplejson.loads(serialize('json', [obj]))[0]['fields']
form = forms.MyForm(fields_dict)
if form.is_valid

这可行,但它似乎不是很Djangish。此外,这似乎是一个常见的问题,所以我正在寻找一种更好的方法。

根据文档,从未绑定到未绑定的翻译数据不会发生: https://docs.djangoproject.com/en/dev/topics/forms/modelforms/#the-save-method 但是,这对我来说是最简单的解决方案。

1 个答案:

答案 0 :(得分:11)

Django的django.forms.models.model_to_dict函数将您现有的模型实例转换为适合绑定到ModelForm的数据字典。

这可能比序列化和反序列化对象更有效,而且肯定更“Djangish”。

如果您还使用instance关键字创建表单,则会知道在保存时更新现有记录。

所以:

from django.forms.models import model_to_dict

...

fields_dict = model_to_dict(obj)
form = forms.MyForm(fields_dict, instance=obj)