2011-08-25 51 views
1

我有一個表格(由形式工廠產生的)數據綁定到Django的形式ChoiceField的選擇,以適應特殊字段呈現

def MyFormGenerator(data): 
    CHOICES = <created_using_data_value> 
    class MyForm(form.Form): 
     myfield = forms.ChoiceField(choices=CHOICES, widget=forms.RadioSelect) 
    return MyForm 

我需要做的是一些Python變量綁定到每一種選擇,這樣什麼模板可以在渲染時使用它們(每個選擇都將在div中進行佈置,並提供關於該選項的詳細信息)。

我可以想出2種方法來做到這一點。 (爲了靈活性,首選#1) 1)給模板一個單獨的列表,列出應該顯示哪些字段(包括數據),並讓模板抓取並呈現每個字段,因爲它需要它們。 2)將數據綁定到該字段,以便模板在迭代時可以抓取和使用它。

我可以差不多做#1(在模板中手動創建輸入字段),但我無法弄清楚如何通過名稱使用變量調出字段選項,因爲很難知道該做什麼當_some_field_是模板變量時不起作用。

現在我從字面上重新創建模板中的SCRATCH字段(重新創建選擇值等),但這遠非理想。

+0

你能澄清你通過字段的數據是什麼意思? [標籤](https://docs.djangoproject.com/en/1.3/topics/forms/#customizing-the-form-template)?模型上的[help_text](https://docs.djangoproject.com/en/1.3/ref/models/fields/#help-text)?或者從上一頁表單中的東西?你可以發佈你當前的表單或模擬你想要的嗎? –

+0

對不起,我有一種錯誤的想法,實際上我需要選擇每個選項(單選按鈕)的數據。如果選擇運輸方式(地面,usps等),我需要將一些數據附加到模板可以使用的每個選項。數據將包含一個值的字典,例如預計到達日期,成本,說明等。 – DarwinSurvivor

+0

爲了清晰起見而重寫了問題 – DarwinSurvivor

回答

0

查看窗體的Django's MultipleModelChoiceField

它允許您使用另一個模型的查詢集作爲您的choice_fields。如果你的選擇會有很多關於他們的數據,無論如何他們可能會更好地擁有自己的模型。 這將工作,假設有某種方法來查詢您想要顯示的結果,即使您爲其分配了一個整數字段給它們。最壞的情況下,你只是有一些巨大的查詢(代碼長度)與許多排除,過濾器等

field1 = forms.MultipleModelChoiceField(queryset=MyModel.objects.filter(method="UPS"), empty_label="(None)") 

它使用默認的selectMultiple小部件,但它可以與kwarg覆蓋。

+0

除了選項不是特定於一個表格之外,這將起作用。該網站使用插件系統(註冊模塊用於應用程序註冊類),並且您從任何一個插件提供的各種選項中選擇1個選項。 這是一個航運的選擇,並有多種運輸模塊(統一費率,加拿大郵政,usps等),每個人有不同的選擇(10天統一費率,次日統一費率,加拿大郵政加急等) 。用戶需要從所有可用的選項中選擇一個選項。 – DarwinSurvivor

0

我發現這樣做的最簡單方法是將數據附加到視圖中而不是選擇字段本身。

例如,如果您有一個與您的選擇長度相同的列表choices_data,並且希望將每條數據綁定到相應的選項,則可以執行下列操作。

def my_view(request): 
    form = MyForm() 
    myfield_choices = zip(form['myfield'], choices_data) 
    ... 

然後你可以通過在你的模板的選擇這樣的循環:

{% for choice, data in myfield_choices %} 
    ... 
{% endfor %}