我想将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']
我甚至无法检查上述循环中的给定值是否为列表实例,因为如果值为列表,则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
作为表单数据创建对象时,我必须将其转换为QueryDict
,这可以简单地通过:
querydict = QueryDict('', mutable=True)
querydict.update(object.data)
然后:
form = ModelForm(querydict)
问题是,当使用列表实例的某些值从dict
创建querydict
时,所有querydict
值都包装在列表中:
print querydict
{u'field-1': [u'value1'], u'field-2': [[u'value-2a', u'value-2b']]}
因此,field-2
的表单验证失败,因为该字段的getlist
返回列表列表(只有一个值)而不是值列表。
我相信
json.dumps(query_dict)
可能是你要找的。 来自JSON encoder and decoder
你可以用^{} 。格式与
dict
构造函数兼容。相关问题 更多 >
编程相关推荐