我希望将ModelForm数据存储在数据库中,在JSONField中,以便以后能够根据这些数据创建对象,只需调用:
form = ModelForm(data_from_jsonfield_as_querydict)
if form.is_valid():
object = form.save()问题1:
我在邮件中有数据:
>>> print request.POST
{u'field-1': u'value1', u'field-2': [u'value-2a', u'value-2b']}我必须把这个QueryDict转换成dict。但是,如果我调用request.POST.dict(),就会丢失字段-2中的列表值:
>>> print request.POST.dict()
{'field-1': 'value1', 'field-2': 'value-2b'}我尝试使用request.POST.getlist,但随后我将所有值作为列表获得:
>>> 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,表单数据存储在数据库中,如下所示:
# object.data
{u'field-1': u'value1', u'field-2': [u'value-2a', u'value-2b']}当我想使用上面的dict作为表单数据创建对象时,我必须将它转换为do QueryDict,这可以简单地通过以下方法完成:
querydict = QueryDict('', mutable=True)
querydict.update(object.data)然后:
form = ModelForm(querydict)问题是,当使用一些作为列表实例的值从querydict创建dict时,所有querydict值都封装在列表中:
print querydict
{u'field-1': [u'value1'], u'field-2': [[u'value-2a', u'value-2b']]}因此,表单验证对于field-2失败,因为该字段的getlist返回列表列表(只有一个值),而不是值列表。
发布于 2016-03-03 09:54:53
你可以用lists()。该格式与dict结构器兼容。
post_data = dict(request.POST.lists())发布于 2016-03-03 09:11:14
发布于 2021-01-29 07:25:12
你必须加上MultiValueDict和QueryDict,
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))https://stackoverflow.com/questions/35766667
复制相似问题