将MultiValueDict传递给Django ModelForm

时间:2012-10-13 14:43:39

标签: django modelform

我正在使用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时):

Actual form

感谢您的帮助!

1 个答案:

答案 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'})