所以我有这个表格(为清楚起见,删除了一些元素)
<form id="{{ section }}-submission-form{{ cell_id }}">
<input type=hidden name="section" value="{{ section }}" />
<input type="hidden" name="school" id="{{ section }}-submit-school{{ cell_id }}" />
{% if section == "posts" %}
<input type=hidden name="url" />
<textarea class="{{ section }}txtinput{{ cell_id }}" name="text-submission"
default="{% if is_advice %}What's your question?{% else %}What's on your mind?{% endif %}"
id="{{ section }}-suggestion-box{{ cell_id }}"
style="margin: 0 0 .5em 0;font-family: Arial, sans-serif;font-size: 14px; width: 410px;"
rows='8'></textarea>
<br />
{% endif %}
{% if section == "photos" %}
<span style='line-height: 40px;'>
<label class="photouploadlabel">URL</label><input type="text" name="image-url" style="width: 335px" /><br>
<label class="photouploadlabel">File</label><input type="file" name="image-file" style="width: 335px"/><br>
<label class="photouploadlabel">Caption</label><input type="text" id="image-caption{{ cell_id }}"
name="image-caption" style="width: 335px" default="optional"/>
</span>
{% endif %}
<div id="{{ section }}-bottomdiv{{ cell_id }}" style="height: 45px; margin-top: .5em; width: 413px;">
<div style="height: 45px">
<label id="{{ section }}-tagsbutton{{ cell_id }}"
style="margin-right: .5em; cursor: pointer; vertical-align: bottom; float:left; line-height: 1.8em;">Tags</label>
<input id="{{ section }}-tagsinput{{ cell_id }}" type="text" name="tags-list" style="position: relative"/>
<button id="send-{{ section }}-suggestion{{ cell_id }}" disabled="disabled"
style="float:right; position: relative; bottom: 7px; right: -4px;">Post</button>
</div>
标签列表输入变为自动完成,用户选择标签,然后将其添加到全局js变量“选定标签”。当用户按下“发布”时,我有以下代码:
alert(selectedtags);
$("#"+section+"-submission-form"+cellid).ajaxSubmit({
url: '/save-suggestion/',
type: 'post',
data: {'tags': selectedtags },
dataType: 'json',
success: function(response){
clear_text(section, cellid);
location.reload();
},
这是奇怪的一点:无论我在哪个部分,警报都有效。但是,如果我在服务器端打印request.REQUEST,如果该部分是我得到的照片
{u'image-url': u'http://i.imgur.com/vUxla.jpg', u'tags-list': u'', u'tags': u'wtf,crazy,pics', u'section': u'photos', u'school': u'1997', u'anonymity-level': u'schoolandmajor', u'image-file': u'', u'image-caption': u''}
即。我想要的是。但如果该部分是帖子,我会
{u'text-submission': u'wtf', u'school': u'1997', u'tags-list': u'', u'url': u'', u'section': u'posts', u'tags[]': u'crazy', u'anonymity-level': u'schoolandmajor'}
因此,它不仅被重命名为tags [](我以前见过并且不太关注,但是......),它还会将我的标记列表截断为最后一个条目。
有谁知道我可能做错了什么?
编辑:经过进一步检查,这是使用request.REQUEST进行的操作,而不是request.POST。
那么,到底是怎么回事?
答案 0 :(得分:4)
request.REQUEST
是MergedDict
,其中包含QueryDict
用于POST,另一个用于GET。迭代MergedDict时,您将获得每个键的单个值,这是__str__
方法为该类所做的操作。你可以使用QueryDict.getlist
来解决这个问题:
print request.REQUEST.getlist('tags[]')
在我的测试中,产量:
[u'asd', u'123']
如果我只是print request.REQUEST['tags[]']
,我只需 123 。
答案 1 :(得分:0)
您的问题似乎出现在您的JavaScript中。您在两个请求中收到的数据似乎都不同。在第一个请求中tags
是以下字符串:
u'tags': u'wtf,crazy,pics'
在后者中,标签设置如下:
u'tags[]': u'crazy'
正如您提到的那样,名称已更改,仅保留最后一项。这种差异似乎源于第一个请求tags
不是列表而是单个逗号分隔字符串。
我认为您将通过更改代码来解决您的问题,以使该变量的处理与之保持一致。基于发送列表导致问题的事实,您可能会建议您的第一个请求的逗号分隔字符串。
使用列表时没有获得正确数据的事实可能是由于JSON数据接收端的解析器,因为它在技术上是一个对象,而一个对象不能有两个具有相同名称的成员(并且您的代码可能将它们全部发送为tags[]
)。