2011-07-12 18 views
0

值我問我的Django的應用程式的用戶很多是/否的問題,我想這樣做,使用複選框,而不是單選按鈕。問題是我想爲每個複選框選擇一個value,而不是每個選中的複選框。有未選中的複選框產量在Django

我發現使用額外hidden checkboxes這一招,它看起來像一個不錯的黑客,但one of the comments提出在我心中有些疑惑:

這是不正確的。這兩個值將被提交,HTML允許具有相同名稱的[多個]值。

是真的嗎?如果是這樣,Django HttpRequest.POST將如何處理相同名稱/密鑰的多個值?

+1

這是你的應用程序,但你有意顛覆的方式HTML表單的工作。那是幾個月後我回到它的時候咬到我的東西(或者加入一個新項目)。 –

+0

@Hank Gay:你建議我用單選按鈕嗎? –

+0

是的。是/否單選按鈕是實現所需功能的標準方式。當然,只要你意識到你違反了規範,你就可以自由地以不同的方式做它。我意識到這實際上不是你問的問題的答案,因此我將它作爲評論。 –

回答

1

由於HTML允許用戶爲單個鍵提交多個值,則Django必須使用專門的數據結構,以適應這種可能性。其結果是MultiValueDict,這是什麼request.GETrequest.POST是引擎蓋下的情況。您可以瀏覽代碼在這裏,結構:http://djangoapi.quamquam.org/trunk/django.utils.datastructures.MultiValueDict-class.html

的短篇小說,雖然是你可以用一個簡單的字典查詢像request.POST['mykey']和所有值的喜歡request.POST.getlist('mykey')列表訪問的第一個值。

儘管如此,其他一些評論者所指出的那樣,有可能是一個更好的方式來處理你所描述的用例。帶有「是/否」選項的單選按鈕是一種解決方案,但從用戶的角度來看可能不太實用。我認爲處理它的最好方法是重新考慮如何處理表單,並儘可能使用Django Forms庫,而不是對原始POST數據進行低級處理。

+0

我將堅持後天演示的'getlist'方法,但我會重新考慮最終版本的解決方案。感謝您指出Forms庫。 –

+0

聽起來不錯。任何完成真正的編程工作的人都可以理解需要一個快速的,如果不是最理想的解決方案:)我認爲,從長遠來看,使用表單將爲您節省很多痛苦。 –