我正在使用ModelForm并使用保存原始发布数据的MultiValueDict传递存储在数据库中的数据,格式为u'first_name': [u'XX'], u'last_name': [u'']
等,但表单将值完全呈现给实际字段,包括[u'']
包装其余字段。
如果我尝试将相同的MultiValueDict传递给常规表单,我不会遇到此问题。
在将数据作为初始值分配之前,我对如何处理字典或处理数据一无所知。
修改
从帖子获取数据并将其恢复到表单的代码
if request_post_data is not None:
self.form = self.FORM_CLASS(data=request_post_data)
self.draft.raw_data = dict(request_post_data) # preserves multiple values per key
self.draft.save()
else:
# conversion to MultiValueDict restores multiple values per key
self.form = self.FORM_CLASS(initial=MultiValueDict(self.draft.raw_data) if self.draft.raw_data else None)`
request_post_data
来自数据库中的序列化字段,实际值如下所示:
<MultiValueDict: {u'last_name': [u''], u'suffix': [u''], u'prefix': [u''], u'first_name': [u'XX'], u'middle_name': [u'']}>
最终以我的形式显示(当发送到ModelForm时):
感谢您的帮助!
答案 0 :(得分:0)
为了使用实例和提供的POST查询字典实例化表单,您可以在视图中执行以下操作:
project = get_object_or_404(Project.objects, pk=project_id)
projectForm = ProjectForm(request.POST,
instance=project)
为了提供一些初始值,您必须使用initial关键字参数在字典中提供初始值。
projectForm = ProjectForm(initial={'name': 'my first project'})