首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将request.POST转储到dict,维护多个值字段?

如何将request.POST转储到dict,维护多个值字段?
EN

Stack Overflow用户
提问于 2016-03-03 08:17:56
回答 3查看 15.8K关注 0票数 6

我希望将ModelForm数据存储在数据库中,在JSONField中,以便以后能够根据这些数据创建对象,只需调用:

代码语言:javascript
复制
form = ModelForm(data_from_jsonfield_as_querydict)
if form.is_valid():
    object = form.save()

问题1:

我在邮件中有数据:

代码语言:javascript
复制
>>> print request.POST
{u'field-1': u'value1', u'field-2': [u'value-2a', u'value-2b']}

我必须把这个QueryDict转换成dict。但是,如果我调用request.POST.dict(),就会丢失字段-2中的列表值:

代码语言:javascript
复制
>>> print request.POST.dict()
{'field-1': 'value1', 'field-2': 'value-2b'}

我尝试使用request.POST.getlist,但随后我将所有值作为列表获得:

代码语言:javascript
复制
>>> for k in request.POST.keys():
...     print request.POST.getlist(k)
[u'value1']
[u'value-2a', u'value-2b']

我甚至不能检查上面循环中给定的值是否是list实例,因为如果值是list,request.POST.get(k)不会返回错误,而另一方面,request.POST[k]为每个字段返回MultiValueDictKeyError

我所想到的唯一解决方案是遍历getlist()获得的所有字段,并将一个值列表转换为字符串,但在我看来,这似乎有点过火了。

问题2:

假设问题1已经解决,并且我有dict,表单数据存储在数据库中,如下所示:

代码语言:javascript
复制
# object.data
{u'field-1': u'value1', u'field-2': [u'value-2a', u'value-2b']}

当我想使用上面的dict作为表单数据创建对象时,我必须将它转换为do QueryDict,这可以简单地通过以下方法完成:

代码语言:javascript
复制
querydict = QueryDict('', mutable=True)
querydict.update(object.data)

然后:

代码语言:javascript
复制
form = ModelForm(querydict)

问题是,当使用一些作为列表实例的值从querydict创建dict时,所有querydict值都封装在列表中:

代码语言:javascript
复制
print querydict
{u'field-1': [u'value1'], u'field-2': [[u'value-2a', u'value-2b']]}

因此,表单验证对于field-2失败,因为该字段的getlist返回列表列表(只有一个值),而不是值列表。

EN

回答 3

Stack Overflow用户

发布于 2016-03-03 09:54:53

你可以用lists()。该格式与dict结构器兼容。

代码语言:javascript
复制
post_data = dict(request.POST.lists())
票数 6
EN

Stack Overflow用户

发布于 2016-03-03 09:11:14

我相信

json.dumps(query_dict)

可能就是你要找的。来自JSON编解码器

票数 0
EN

Stack Overflow用户

发布于 2021-01-29 07:25:12

你必须加上MultiValueDict和QueryDict,

代码语言:javascript
复制
from django.http.request import QueryDict, MultiValueDict

dictionary = {'key_1': ['1'], 'key_2': ['1', '2'], }
query_dict = QueryDict('', mutable=True)
query_dict.update(MultiValueDict(dictionary))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35766667

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档