Формы Django: Как перебирать выбор поля в форме Django - PullRequest
0 голосов
/ 02 ноября 2011

Я не знаю, правильно ли я это делаю.

У меня есть форма:

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, Содержание: Сделка, на которую вы ссылались, была куплена

Поэтому я хочу, чтобы эти поля были индивидуально

1 Ответ

4 голосов
/ 02 ноября 2011

Вы вообще не хотите «перебирать поле». Джанго делает это для тебя. Единственная проблема, с которой вы сталкиваетесь, заключается в том, как создать отображаемое значение для выбора поля - по какой-то причине вы создаете их как наборы, когда вам просто нужна строка. Ваш __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 }}.

...