我有一個簡單的Django活塞處理程序,它可以創建模型的新實例並將其保存。django活塞發送請求將字符串更改爲列表
從客戶端,我發佈使用Javascript對象和JQuery.post。
在使用Firebug檢查數據,後弦看起來是這樣的:
classification=&organization=&title=Formatting+Test+7&description=test&created_by=created_on=&last_modified=&csrfmiddlewaretoken=a8352bb51f88c271119a81228a5c291f
正如你所看到的,只有標題,描述和csrfmiddlewaretoken設置。
裏面的活塞處理程序,在任何其他代碼運行之前的創建方法的頂部,我打印出來的request.POST:
print 'POST:', request.POST
它打印在Django的開發服務器的輸出如下:
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表單保存數據時,它將列表轉換爲字符串,當數據顯示在客戶機上時,它將顯示「[u'Formatting Test 7']」,而不是「格式化Test 7」。
谷歌搜索似乎沒有返回任何人有同樣的問題,我一直在使用活塞超過6個月,我從來沒有見過這樣的錯誤之前。
編輯:正如JPIC所說,我認爲我遇到的錯誤不是一個錯誤,而是設計。我的問題是在使用Django表單之前擴展QuerySet中的數據。
錯誤的方式:
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)
謝謝,這很有幫助。它讓我明白,問題在於我在將數據放入表單之前如何更新數據。查看我的問題中的解決方案的編輯。 – MrOodles 2012-02-01 16:53:46