2012-04-17 53 views
0

因此,我将一个网站从PHP(Codeigniter)转换为Django,认为这将是一个很好的学习方式。我可以解决大部分问题,但是我被困在这个问题上。Django商店HTML输入数组从_POST

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

存储的HTML输入数组作为JSON编码在DB串,确实蟒/ django的提供任何类似的功能。

我在看simplejson.dumps(request.POST['estimate'])而是抛出一个MultiValueDictKeyError

的POST包含了诸如estimate[discount] estimate[tax]
estimate[shipping]
项目

所以可以Django的/ Python的做上述情况,采取HTML输入数组,JSON econde它并将其存储在DB

+0

后续问题,改变字段,如折扣,税收,航运是直截了当的;然而,该表单还具有/能够执行多个行项目(描述,数量,成本),现在使用的是html数组,对于我可以存储多少数据没有任何实际的限制。对于如何解决HTML表单中存在多个订单项并能够全部存储这些新问题的任何建议。 – Spaznuski 2012-04-17 03:20:40

回答

0

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

类的QueryDict

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

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

作为一个字典(JSON对象或Python字典)不能有多个键JSON串行器抛出MultiValueDictKeyError说,你有多个相同的键。

不知道PHP是怎么做的,但解决将是以下

  1. 复制POST的QueryDict的,因此不存在任何重复键修改内容。

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

的原因的QueryDict是,提交表单,那么可以从有效的形式获得多个按键,多选择字段等

希望帮助。

马克

+0

感谢您提供的信息,看起来像我必须更改表单数据。希望有一个像PHP一样的简单单线程:( – Spaznuski 2012-04-17 03:05:19

0

您所遇到的问题是MultiValueDictKeyError它代表里面有MultiValueDictrequest.POST没有estimate关键。尝试

# 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

+0

表单数据是可变的,有多个项目完成。更改表单的图形将是最好的 – Spaznuski 2012-04-17 03:07:00