2011-11-02 63 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 }}