我想从一个对象中获得一个绑定(bind)表单来使用 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。此外,这似乎是一个常见问题,所以我一直在寻找一种更好的方法来做到这一点。
根据文档,将数据从未绑定(bind)形式转换为绑定(bind)形式并不意味着发生:
https://docs.djangoproject.com/en/dev/topics/forms/modelforms/#the-save-method
但是,这对我来说是最简单的解决方案。
最佳答案
有Django的django.forms.models.model_to_dict
将现有模型实例转换为适合绑定(bind)到 ModelForm
的数据字典的函数.
这可能比序列化和反序列化对象更有效,而且肯定更“Djangish”。
如果您还使用 instance
创建表单关键字,它会知道在保存时更新现有记录。
所以:
from django.forms.models import model_to_dict
...
fields_dict = model_to_dict(obj)
form = forms.MyForm(fields_dict, instance=obj)
关于django - 将未绑定(bind)的表单转换为绑定(bind)的表单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8993749/