mor*_*ing 5 python django dictionary
我想将ModelForm数据存储在中的数据库中JSONField,以便以后可以根据此数据创建对象,只需调用:
form = ModelForm(data_from_jsonfield_as_querydict)
if form.is_valid():
object = form.save()
Run Code Online (Sandbox Code Playgroud)
问题一:
我在POST中有数据:
>>> print request.POST
{u'field-1': u'value1', u'field-2': [u'value-2a', u'value-2b']}
Run Code Online (Sandbox Code Playgroud)
而且我必须将其转换QueryDict为dict。但是,如果我打电话给request.POST.dict()我,我会失去字段2的列表值:
>>> print request.POST.dict()
{'field-1': 'value1', 'field-2': 'value-2b'}
Run Code Online (Sandbox Code Playgroud)
我尝试使用,request.POST.getlist但随后获得所有值作为列表:
>>> for k in request.POST.keys():
... print request.POST.getlist(k)
[u'value1']
[u'value-2a', u'value-2b']
Run Code Online (Sandbox Code Playgroud)
我什至无法检查上述循环中的给定值是否为列表实例,因为request.POST.get(k)如果值是list且另一方面针对每个字段request.POST[k]返回MultiValueDictKeyError,则不返回错误。
我想到的唯一解决方案是循环遍历所有获得的字段getlist()并将一值列表转换为字符串,但是在我看来,这似乎有点过分。
问题2:
假设问题1已解决,并且我已经dict将表单数据存储在数据库中,如下所示:
# object.data
{u'field-1': u'value1', u'field-2': [u'value-2a', u'value-2b']}
Run Code Online (Sandbox Code Playgroud)
当我想使用上述内容dict作为表单数据创建对象时,我必须将其转换为do QueryDict,这可以通过以下方式简单地完成:
querydict = QueryDict('', mutable=True)
querydict.update(object.data)
Run Code Online (Sandbox Code Playgroud)
然后:
form = ModelForm(querydict)
Run Code Online (Sandbox Code Playgroud)
问题是,当创建querydict从dict与某些值列表实例,所有querydict值都包裹在列表:
print querydict
{u'field-1': [u'value1'], u'field-2': [[u'value-2a', u'value-2b']]}
Run Code Online (Sandbox Code Playgroud)
因此,表单验证失败,field-2因为getlist该字段返回列表列表(具有一个值)而不是值列表。
你可以使用lists(). 格式与dict构造函数兼容。
post_data = dict(request.POST.lists())
Run Code Online (Sandbox Code Playgroud)
小智 0
我相信
json.dumps(query_dict)
可能就是您正在寻找的。来自JSON 编码器和解码器
| 归档时间: |
|
| 查看次数: |
7271 次 |
| 最近记录: |