2016-07-15 3 views
0

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

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

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

Мой 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? Что я делаю неправильно?

Спасибо.

+0

В 'forms.py',' forms.ChoiceField' вызывается с аргументом 'choice', который является строкой вместо кортежа. Можете ли вы попробовать заменить это? – raphv

+0

you cand make 'input type =" choicefield "', только 'radio' или' checkbox' – valignatev

+0

ChoiceFields - это сложные поля, и вы также можете сделать их как '