0

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

实际形式

谢谢你的帮助!

4

1 回答 1

0

为了使用实例和提供的 POST 查询字典实例化表单,您可以在视图中执行以下操作:

    project = get_object_or_404(Project.objects, pk=project_id)
    projectForm = ProjectForm(request.POST, 
                              instance=project)

为了提供一些初始值,您必须使用初始关键字参数在字典中提供初始值。

projectForm = ProjectForm(initial={'name': 'my first project'})
于 2012-10-13T14:49:25.950 回答