2011-11-02 83 views
0

我不知道我是否以正確的方式執行此操作。Django Forms:如何迭代Django表單中的字段的選擇

我有一個表格:

class ConnectSelectMultipleForm(forms.Form): 
    class Meta: 
     model = Connect 

    def __init__(self, *args, **kwargs): 
     messages = kwargs.pop('messages') 
     choices = [] 
     if messages: 
      pass 
     else: 
      messages = [] 

     for message in messages: 
      index = (message.id, {message.sender, message, message.id}) 
      choices.append(index) 

     super(ConnectSelectMultipleForm, self).__init__(*args, **kwargs) 
     self.fields['message'] = forms.MultipleChoiceField(choices=choices, 
            widget=forms.CheckboxSelectMultiple) 

正如上面我發送{message.sender, message ,message.id}到模板中可以看出。現在我想在模板中訪問這些變量。

{% for field in select_form %}  
    {% for fi in field %} 
     {{ fi.message }} 
     {{ fi.message.sender }} 
     {{ fi.message.id }} 
    {% endfor %} 
{% endfor %} 

以上代碼有誤。但我們可以做類似的事情嗎?還是有另一種方法來做我想做的事情?

在此先感謝。

###編輯

的輸出中我對剛剛印刷領域如下:

set([5, u'Everycrave', <Connect: The deal you refered has been bought>]) 

我想是

編號越來越:5,名稱:Everycrave,內容:交易你refered已經買

所以我想這些領域分別

+0

你還沒有解釋你實際想要達到什麼。輸出應該是什麼,爲什麼你不能只輸出該字段? –

+0

我現在得到的結果是([5,u'Everycrave',<連接:你所說的交易已經被買了])。我想要的結果是5,Everycrave,你所說的交易有被買了 – Akamad007

+0

但我不明白這與這個領域有什麼關係。一個字段用於輸入/選擇數據。你想在這裏輸入或選擇什麼? –

回答

4

你不想「遍歷場「完全可以。 Django爲你做這個。唯一的問題是如何爲字段的選擇創建顯示值 - 出於某種原因,當您只需要一個字符串時,您將它們創建爲集合。你__init__方法應該是這樣的:

def __init__(self, *args, **kwargs): 
    messages = kwargs.pop('messages', None) 
    super(ConnectSelectMultipleForm, self).__init__(*args, **kwargs) 
    if messages is None: 
     messages = [] 

    choices = [(message.id, "%s: %s (%s)" % message.sender, message.text, message.id) 
       for message in messages] 

    self.fields['message'].choices = choices 

現在你只是指現場模板以正常方式:{{ form.message }}