我希望从对象获得绑定表单以使用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 但是,这对我来说是最简单的解决方案。
答案 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)