【发布时间】:2012-02-24 07:39:45
【问题描述】:
我有一个简单的 Django-Piston 处理程序,它创建一个模型的新实例并保存它。
从客户端,我使用 Javascript 对象和 JQuery.post 发布。
使用 Firebug 检查数据后,帖子字符串如下所示:
classification=&organization=&title=Formatting+Test+7&description=test&created_by=created_on=&last_modified=&csrfmiddlewaretoken=a8352bb51f88c271119a81228a5c291f
如你所见,只设置了title、description和csrfmiddlewaretoken。
在 Piston Handler 内部,在运行任何其他代码之前,在 create 方法的顶部,我打印出 request.POST:
print 'POST:', request.POST
在 Django Dev Server 输出中打印以下内容:
POST: <QueryDict: {u'description': [u'test'], u'classification': [u''], u'title': [u'Formatting Test 7'], u'created_by': [u''], u'created_on': [u''], u'last_modified': [u''], u'organization': [u''], u'csrfmiddlewaretoken': [u'a8352bb51f88c271119a81228a5c291f']}>
如您所见,所有数据现在都在列表中。当我使用 Django Form 保存数据时,它会将列表转换为字符串,当数据显示在客户端上时,它会显示“[u'Formatting Test 7']”,而不是“Formatting Test 7”。
谷歌搜索似乎没有返回任何有同样问题的人,而且我已经使用 Piston 超过 6 个月了,我以前从未见过这样的错误。
编辑:正如 JPIC 所说,我认为我遇到的错误不是错误,而是设计使然。我的问题是在将 QuerySet 中的数据与 Django 表单一起使用之前对其进行了扩展。
错误的方式:
some_initial_data = {
'created_by': creator.pk,
'organization': org.pk,
'classification': 7
}
post = dict(request.POST)
post.update(some_initial_data)
form = MyModelForm(post)
正确的道路:
如QueryDict的更新方法中所述:https://docs.djangoproject.com/en/1.3/ref/request-response/#querydict-objects
some_initial_data = {
'created_by': creator.pk,
'organization': org.pk,
'classification': 7
}
post = request.POST.copy()
post.update(initial_data)
form = MyModelForm(post)
【问题讨论】:
标签: jquery python django post django-piston