【发布时间】:2017-10-20 17:16:39
【问题描述】:
在我的 Django 应用程序中,我有一个 POST 请求 QueryDict,我正在尝试更改其值。我知道 QueryDict 对象是不可变的,所以我实例化了一个可变的 QueryDict 项。问题的症结在于该值是来自应用程序前端的 AJAX 调用的逗号分隔数字的字节字符串,例如U"2,4,6,7"。
QueryDict 中的每个键值本质上是一个值列表,[U'2', U'4'] 所以我需要更改从我的前端发布的单字节 U"2,4,6,7"进入字节字符串列表 [U'2', U'4', U'6', '7']。然而,问题是每当我尝试对字符串进行拆分并将请求 POST 键值分配给新的拆分字符串时,键值是一个列表,在一个列表中。例如{'专业知识':[[U'2',U'4']]}。我尝试了一个人为的解决方案,通过迭代值的拆分列表,并将它们附加到请求 POST 项的键值中,但它给了我错误
AttributeError: 'unicode' object has no attribute 'append'
在可变 QueryDict 对象中,如果每个 QueryDict 项目都是一个列表,并且它没有附加值,那么如何编辑列表项目?有没有更简单的方法来完成这个?
查看功能代码
mentors = Mentor.objects.filter(is_active=True, is_verified=True).order_by('last_name', 'first_name')
ajax_post = dict(request.POST.iteritems())
post = QueryDict('', mutable=True)
post.update(ajax_post)
for key in post:
postlist = post[key].split(',')
for item in postlist:
post[key].append(item)
# First attempt that gives list in a list
# for item in post:
# post[key] = post[key].split(',')
form = MentorSearchForm(data=post)
if form.is_valid():
mentors = filter_mentors(form.cleaned_data)
【问题讨论】:
-
您应该解释为什么要修改 querydict,而不是编写表单验证以便它接受发布的内容。
-
(而且 Python 列表也没有名为
push的方法;也许您的意思是append?) -
是的,我的意思是追加。抱歉,我一直在从 python 到 javascript 来回切换,有时会互换这些术语。
标签: django dictionary post request