Ручное отображение формы Django - PullRequest
0 голосов
/ 23 мая 2019

Я хочу вручную отобразить форму в моем шаблоне, но я пытаюсь не дать ожидаемый результат, и неясно, почему.

class MyForm(forms.Form):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields['field1'] = forms.BooleanField()
        self.fields['field2'] = forms.BooleanField()
        systems = System.objects.all()
        for i in range(len(systems)):
            self.fields['s' + str(i)] = forms.BooleanField()
        self.fields['field3'] = forms.BooleanField()

        self.initial_fields = [self.fields['field1'], self.fields['field2']]

сейчас, когда я делаю этов моем шаблоне:

{% for field in form.visible_fields %}
    {{ field }}
{% endfor %}

возвращает то, что вы ожидаете ... после поиска метода visible_fields он просто возвращает список полей.Таким образом, в теории, если я создам свой собственный список полей, как в self.initial_fields, генератор форм должен отобразить следующее, как указано выше:

{% for field in form.initial_fields %}
    {{ field }}
{% endfor %}

, но вместо этого я получу этот вывод в своем шаблоне:

<django.forms.fields.BooleanField object at 0x000001242F51E588> 
<django.forms.fields.BooleanField object at 0x000001242F51E400>

Я предполагаю, что мне не хватает инициализации самого поля?Я не понимаю, почему один работает, а другой нет.Кто-нибудь знает?

1 Ответ

1 голос
/ 23 мая 2019

Вам нужно получить связанный объект поля, а не само поле. Это не совсем чистый способ сделать это, но если вы хотите взломать его, вы должны сделать так,

...
self.initial_fields = [self.fields['field1'].get_bound_field(self, 'field1'),
                       self.fields['field2'].get_bound_field(self, 'field2')]
...

Надеюсь, это поможет!

...