来自_POST的Django Store HTML输入数组

时间:2012-04-17 02:27:08

标签: python html django json

所以我将一个站点从PHP(Codeigniter)转换为Django,认为这是一个很好的学习方法。我可以解决大多数问题但是我坚持这个问题。

在PHP中我可以$e->estimate = json_encode($_POST['estimate']);

将HTML输入数组存储为DB中的JSON编码字符串,python / django是否提供任何类似的功能。

我正在查看simplejson.dumps(request.POST['estimate']),但会抛出MultiValueDictKeyError

POST包含estimate[discount] estimate[tax]
estimate[shipping]

等项目

Django / Python可以执行上述操作,使用HTML输入数组,JSON进行econde并将其存储在数据库中

2 个答案:

答案 0 :(得分:0)

看了django中的文档后,我发现request.POST是一个QueryDict对象。

  

类QueryDict

     

在HttpRequest对象中,GET和POST属性   是django.http.QueryDict的实例。 QueryDict是一个类似字典的   自定义类来处理同一个键的多个值。这个   是必要的,因为一些HTML表单元素,特别是为同一个键传递多个值。

https://docs.djangoproject.com/en/dev/ref/request-response/#django.http.QueryDict

作为字典(JSON对象或Python dict),JSON序列化器不能有多个键抛出MultiValueDictKeyError,表示您有多个相同的键。

不确定php是如何做到的,但修复程序可能是以下任何一种

  1. 复制POST QueryDict并修改内容,以便没有任何重复的密钥。

  2. 更改正在提交的表单数据。

  3. QueryDict的原因是,对于提交的表单,您可以有效地从表单中获取多个键,用于多选字段等。

    希望有所帮助。

    标记

答案 1 :(得分:0)

您遇到的问题是MultiValueDictKeyError,表示estimate MultiValueDict内没有request.POST个密钥。尝试

# list existed keys
request.POST.keys()
# or
discount = request.POST.get('estimate[discount]')
tax = request.POST.get('estimate[tax]')
shipping = request.get('estimate[shipping]')

然后你可以构建类似

的东西
estimate = dict(discount=discount, tax=tax, shipping=shipping)
simplejson.dumps(estimate)

但是,不是 the normal way of process form in Django