【问题标题】:Django Forms: How to iterate over a Choices of a field in Django formDjango 表单:如何在 Django 表单中迭代一个字段的选择
【发布时间】:2011-12-20 03:45:54
【问题描述】:

我不知道我这样做是否正确。

我有一个表格:

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>])

我想要的是

Id : 5 ,Name : Everycrave , Content : 你推荐的deal已经买了

所以我想要单独的这些字段

【问题讨论】:

  • 你还没有解释你真正想要实现的目标。输出应该是什么,为什么不能只输出字段本身?
  • 我目前得到的输出是 set([5, u'Everycrave', ])。我想要的输出是 5 , Everycrave,你提到的交易已被购买
  • 但我不明白这与该领域有什么关系。字段用于输入/选择数据。您想在这里输入或选择什么?
  • self.fields['message'] = forms.MultipleChoiceField(choices=choices, widget=forms.CheckboxSelectMultiple) @Daniel 很抱歉造成混淆 以上是我作为选择给出的消息对象场地。用户将选择它作为多项选择形式。我想显示每条消息的所有信息。看到消息,用户可以选择和删除单个消息。

标签: django django-forms django-templates


【解决方案1】:

您根本不想“遍历该字段”。 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 }}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-29
    • 2014-02-25
    • 2020-07-26
    • 2015-11-04
    • 2015-11-08
    • 1970-01-01
    • 2011-09-01
    • 2012-08-12
    相关资源
    最近更新 更多