2011-01-09 81 views
0

我有一種形式是這樣的:生成唯一的名稱爲每個在Django表單字段的模板

class PersonForm(forms.ModelForm): 
    name=forms.CharField(label = 'Name') 
    birth_date = forms.DateField(widget = SelectDateWidget(years=range(1985,2020)),label = 'DOB') 
    place = forms.CharField(label='Place') 

假設我用這種形式與birth_date(日期字段)在模板重複兩次如下:

{% for field in form %} 
<tr> 
     <th scope="row" class={% cycle "spec" "specalt" %}> </th>    
     <td {% cycle '' 'class="alt"' %}> 

    {% if field.field.datatype == 'Date' %} 

     **Range : {{field}} {{field}}**    

    {% else %} 
     {{ field}}    
    {% endif %} 

如上所示,我重複日期字段兩次。但是,我收到POST請求中的表單,我無法在兩個日期字段之間進行區分。我怎樣才能重命名模板中的日期字段,以便我可以在我的視圖函數中輕鬆區分。

注意:請不要在「class PersonForm(forms.ModelForm)」中添加另一個字段,因爲這在我的實際問題中已排除。我根據自己的需要說了這個問題。 在此先感謝。

+1

如果您解釋「我遇到的實際問題」,那麼以正確的方式幫助您解決問題會更容易。 – 2011-01-09 18:54:01

回答

0

我想你正確的解決方案是創建一個小部件,將呈現這兩個領域,並將能夠檢索值,並對該值做一些清理操作。

據我所知沒有關於自定義小部件寫作主題的詳細文檔。您可以通過在Django代碼中找到的示例進行編碼:

django.forms.widgets 
0

Django中的窗體應該表示要顯示給最終用戶的字段。如果表單的可視化表示應該包含比表單中聲明的​​字段更多或更少的內容,則可能是錯誤的。

如果您需要'開始日期'和'結束日期'字段,那麼應該在您創建的表單類中表示。如果您需要上面只有一個日期的表格,則有兩種不同的表格!

沒有簡單的方法劫持表單,修改表單,顯示錶單,然後在到達綁定數據的服務器時驗證表單。你可以做一個動態的表單子類,但是我不明白在這種情況下這會是一件好事。你知道你在'編譯時'需要的字段。只要把它們放在一個表格中!即使這是一個嶄新的品牌。

最後一件事,是否有一個原因,你使用forms.ModelForm?看來你正在創建一個完全自定義的表單。我認爲forms.Form就是你所追求的。

相關問題