0

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

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

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

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

POST 包含以下项目estimate[discount] estimate[tax]
estimate[shipping]

那么 Django/Python 可以做上面的事情,获取一个 HTML 输入数组,JSON 解析它并将其存储在数据库中

4

2 回答 2

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 字典)不能有多个键,因此 JSON 序列化程序会抛出 MultiValueDictKeyError,表示您有多个相同的键。

不确定 php 是如何做到的,但可以通过以下方式之一进行修复

  1. 复制 POST QueryDict 并修改内容,这样就没有任何重复的键。

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

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

希望有帮助。

标记

于 2012-04-17T02:47:06.057 回答
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)

但是,这不是 Django 中处理表单的正常方式

于 2012-04-17T02:55:47.580 回答