Невозможно отобразить ChoiceField в шаблоне в Django

Я пытаюсь показать ChoiceField в шаблоне на Django, но не могу заставить его работать.

Я нашел здесь несколько решений, но мне кажется, что они не работают (Возможное решение), но получаю сообщение об ошибке: too many values to unpack в строке {{ form.as_p }}.

Поискав в Интернете, я нашел это решение но я не могу адаптировать свой код и заставить его работать. Я получаю TextField вместо «Dropdown» (в Django Choicefield). Кроме того, это решение перечисляет все элементы в цикле for, и я получаю 4 текстовых поля вместо 2 полей выбора с элементами.

Мой forms.py выглядит так:

class SimpleDeploy(forms.Form):
    def __init__(self, networkList, policiesList, *args, **kwargs):
        super(SimpleDeploy, self).__init__(*args, **kwargs)
        if networkList and policiesList:
            self.fields['networkPartitions'] = forms.ChoiceField(choices=networkList)
            self.fields['applicationPolicies'] = forms.ChoiceField(choices=policiesList)
        else:
            self.fields['networkPartitions'] = forms.ChoiceField(choices='No network partitions found')
            self.fields['applicationPolicies'] = forms.ChoiceField(choices='No application policies found')

И на моем views.py:

def simpleDeploy(request):
    netList = getDetailsNetworkPartitions(request)
    polList = getDetailsApplicationPolicies(request)
    if request.method == 'POST':
        abs(5) #Nothing here by the moment
    else:
        simpleForm = SimpleDeploy(networkList=netList, policiesList=polList)
    return render(request, 'apacheStratos/simpleDeploy.html', {'form': simpleForm})

Где netList и polList - это список кортежей, например:

[(u'application-policy-2', u'application-policy-2'), (u'application-policy-1', u'application-policy-1')]

И в моем шаблоне я пытаюсь показать ChoiceField следующим образом:

<table class="table">
    {% for item in form.networkPartitions.field.choices %}
        <label for="">Network Partitions</label> <input type="choicefield" name="networkPartitions" value="{{item.1}}"/>
    {% endfor %}
    {% for item in form.applicationPolicies.field.choices %}
        <label for="">Application Policies</label> <input type="choicefield" name="applicationPolicies" value="{{item.1}}"/>
    {% endfor %}
</table>

Как я могу получить поле выбора и доступ к элементам без использования цикла for? Что я делаю неправильно?

Спасибо.


person Aker666    schedule 15.07.2016    source источник
comment
В forms.py forms.ChoiceField вызывается с аргументом choices, который является строкой, а не кортежем. Может попробовать заменить?   -  person raphv    schedule 15.07.2016
comment
можно сделать input type="choicefield", только radio или checkbox   -  person valignatev    schedule 15.07.2016
comment
ChoiceFields — это сложные поля, и вы также можете отобразить их как <select><option>..., поэтому я бы не рекомендовал ничего, кроме {{form.networkPartitions}}, которое обычно должно работать.   -  person raphv    schedule 15.07.2016
comment
Спасибо @raphv! С {{form.networkPartitions}} получилось :)   -  person Aker666    schedule 15.07.2016


Ответы (1)


Благодаря @raphv решение было помещено {{form.networkPartitions}} и {{form.applicationPolicies}} в шаблон. Так просто....

person Aker666    schedule 15.07.2016