2015-08-05 6 views
0

Я создаю некоторые поля формы динамически, как предложено в этом вопросе:Джанго ошибка значение при добавлении поля формы

Passing data into django forms

форма:

class DispatchForm(forms.Form): 
driver = forms.MultipleChoiceField(choices=[]) 
route = forms.MultipleChoiceField(choices=[]) 
states = forms.CharField() 

def __init__(self, *args, **kwargs): 
    DRIVER_CHOICES = [[driver, driver] for driver in self.extract_drivers(args[0])] 
    ROUTE_CHOICES = [[route, route] for route in args[1]] 
    super(DispatchForm, self).__init__(*args, **kwargs) 
    self.fields['driver'].choices = DRIVER_CHOICES 
    self.fields['route'].choices = ROUTE_CHOICES 

Шаблон:

<div class="form-group"> 
          <label class="col-lg-12" for="route">Ruta</label> 
          <select class="form-control" id="route"> 
           {% for value, input in form.route.field.choices %} 
            <option value="{{ value }}">{{ input }}</option> 
           {% endfor %} 
          </select> 
          <label class="col-lg-12" for="state">Estado</label> 
         <label class="col-lg-12" for="driver">Conductor</label> 
          <select class="form-control" id="driver"> 
           {% for value, input in form.driver.field.choices %} 
            <option value="{{ value }}">{{ input }}</option> 
           {% endfor %} 
          </select> 
         {{ form.states }} 
         </div> 

вид

def dashboard(request): 
template_name = 'dashboard.html' 
drivers = Driver.objects.using('routes').all() 
routes = RouteManager().extract_routes() 
form = DispatchForm(drivers, routes) 
return render(request, template_name, { 
    'form': form, 
}) 

Но что бы новое поле я пытаюсь добавить к форме получает меня «слишком много значений для распаковки (ожидается 2)»

в этом случае, он говорит мне, что ошибка в {{form.states }}. Я подозреваю, что это связано с методом init, который я модифицировал, но все, что я пробовал, бросает мне ту же ошибку.

Спасибо!

Environment: 


Request Method: GET 
Request URL: http://127.0.0.1:8000/dashboard/ 

Django Version: 1.8.3 
Python Version: 3.4.0 
Installed Applications: 
('django.contrib.admin', 
'django.contrib.auth', 
'django.contrib.contenttypes', 
'django.contrib.sessions', 
'django.contrib.messages', 
'django.contrib.staticfiles', 
'web_server', 
'widget_tweaks', 
'datetimewidget') 
Installed Middleware: 
('django.contrib.sessions.middleware.SessionMiddleware', 
'django.middleware.common.CommonMiddleware', 
'django.middleware.csrf.CsrfViewMiddleware', 
'django.contrib.auth.middleware.AuthenticationMiddleware', 
'django.contrib.auth.middleware.RemoteUserBackend', 
'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 
'django.contrib.messages.middleware.MessageMiddleware', 
'django.middleware.clickjacking.XFrameOptionsMiddleware', 
'django.middleware.security.SecurityMiddleware') 


Template error: 
In template /home/carlos/smart/SMWEB-CANOPUS/web_server/templates/dashboard.html, error at line 111 
    too many values to unpack (expected 2) 

    101 :           <option value="{{ value }}">{{ input }}</option> 



    102 :          {% endfor %} 



    103 :         </select> 



    104 :         <label class="col-lg-12" for="state">Estado</label> 



    105 :        <label class="col-lg-12" for="driver">Conductor</label> 



    106 :         <select class="form-control" id="driver"> 



    107 :          {% for value, input in form.driver.field.choices %} 



    108 :           <option value="{{ value }}">{{ input }}</option> 



    109 :          {% endfor %} 



    110 :         </select> 



    111 :        {{ form.states }} 



    112 :        </div> 



    113 :      </div> 



    114 :   </div> 



    115 :    </div> 



    116 :  </section><! --/wrapper --> 



    117 :  </section><!-- /MAIN CONTENT --> 



    118 : 



    119 :  <!--main content end--> 



    120 :  <!--footer start--> 



    121 :  <footer class="site-footer"> 


Traceback: 
File "/home/carlos/SMARtenv/lib/python3.4/site-packages/django/core/handlers/base.py" in get_response 
    132.      response = wrapped_callback(request, *callback_args, **callback_kwargs) 
File "/home/carlos/smart/SMWEB-CANOPUS/web_server/views.py" in dashboard 
    42.   'form': form, 
File "/home/carlos/SMARtenv/lib/python3.4/site-packages/django/shortcuts.py" in render 
    67.    template_name, context, request=request, using=using) 
File "/home/carlos/SMARtenv/lib/python3.4/site-packages/django/template/loader.py" in render_to_string 
    99.   return template.render(context, request) 
File "/home/carlos/SMARtenv/lib/python3.4/site-packages/django/template/backends/django.py" in render 
    74.   return self.template.render(context) 
File "/home/carlos/SMARtenv/lib/python3.4/site-packages/django/template/base.py" in render 
    209.      return self._render(context) 
File "/home/carlos/SMARtenv/lib/python3.4/site-packages/django/template/base.py" in _render 
    201.   return self.nodelist.render(context) 
File "/home/carlos/SMARtenv/lib/python3.4/site-packages/django/template/base.py" in render 
    903.     bit = self.render_node(node, context) 
File "/home/carlos/SMARtenv/lib/python3.4/site-packages/django/template/debug.py" in render_node 
    79.    return node.render(context) 
File "/home/carlos/SMARtenv/lib/python3.4/site-packages/django/template/debug.py" in render 
    92.    output = force_text(output) 
File "/home/carlos/SMARtenv/lib/python3.4/site-packages/django/utils/encoding.py" in force_text 
    90.      s = six.text_type(s) 
File "/home/carlos/SMARtenv/lib/python3.4/site-packages/django/utils/html.py" in <lambda> 
    399.   klass.__str__ = lambda self: mark_safe(klass_str(self)) 
File "/home/carlos/SMARtenv/lib/python3.4/site-packages/django/forms/forms.py" in __str__ 
    537.   return self.as_widget() 
File "/home/carlos/SMARtenv/lib/python3.4/site-packages/django/forms/forms.py" in as_widget 
    593.   return force_text(widget.render(name, self.value(), attrs=attrs)) 
File "/home/carlos/SMARtenv/lib/python3.4/site-packages/django/forms/forms.py" in value 
    638.     self.data, self.form.initial.get(self.name, self.field.initial) 
File "/home/carlos/SMARtenv/lib/python3.4/site-packages/django/forms/forms.py" in data 
    616.   return self.field.widget.value_from_datadict(self.form.data, self.form.files, self.html_name) 
File "/home/carlos/SMARtenv/lib/python3.4/site-packages/django/forms/widgets.py" in value_from_datadict 
    223.   return data.get(name, None) 
File "/home/carlos/SMARtenv/lib/python3.4/site-packages/django/db/models/query.py" in get 
    325.   clone = self.filter(*args, **kwargs) 
File "/home/carlos/SMARtenv/lib/python3.4/site-packages/django/db/models/query.py" in filter 
    679.   return self._filter_or_exclude(False, *args, **kwargs) 
File "/home/carlos/SMARtenv/lib/python3.4/site-packages/django/db/models/query.py" in _filter_or_exclude 
    697.    clone.query.add_q(Q(*args, **kwargs)) 
File "/home/carlos/SMARtenv/lib/python3.4/site-packages/django/db/models/sql/query.py" in add_q 
    1309.   clause, require_inner = self._add_q(where_part, self.used_aliases) 
File "/home/carlos/SMARtenv/lib/python3.4/site-packages/django/db/models/sql/query.py" in _add_q 
    1337.      allow_joins=allow_joins, split_subq=split_subq, 
File "/home/carlos/SMARtenv/lib/python3.4/site-packages/django/db/models/sql/query.py" in build_filter 
    1146.   arg, value = filter_expr 

Exception Type: ValueError at /dashboard/ 
Exception Value: too many values to unpack (expected 2) 

ошибка:

Error during template rendering 

In template /home/carlos/smart/SMWEB-CANOPUS/web_server/templates/dashboard.html, error at line 111 
too many values to unpack (expected 2) 
101           <option value="{{ value }}">{{ input }}</option> 
102          {% endfor %} 
103         </select> 
104         <label class="col-lg-12" for="state">Estado</label> 
105        <label class="col-lg-12" for="driver">Conductor</label> 
106         <select class="form-control" id="driver"> 
107          {% for value, input in form.driver.field.choices %} 
108           <option value="{{ value }}">{{ input }}</option> 
109          {% endfor %} 
110         </select> 
111 

     {{ form.states }} 



112        </div> 
113      </div> 
114    </div> 
115    </div> 
116   </section><! --/wrapper --> 
117  </section><!-- /MAIN CONTENT --> 
118 
119  <!--main content end--> 
120  <!--footer start--> 
121  <footer class="site-footer"> 
+0

Вы должны показать фактическую ошибку и трассировку. –

+0

Привет, Даниэль, оба были добавлены, спасибо. –

ответ

0

Кажется, я нашел эту проблему, я проезжал * арг и ** kwargs конструктору, но когда я изменил от этого:

def __init__(self, *args, **kwargs): 
DRIVER_CHOICES = [[driver, driver] for driver in self.extract_drivers(args[0])] 
ROUTE_CHOICES = [[route, route] for route in args[1]] 
super(DispatchForm, self).__init__(*args, **kwargs) 
self.fields['driver'].choices = DRIVER_CHOICES 
self.fields['route'].choices = ROUTE_CHOICES 

Для это:

def __init__(self, drivers, routes, *args, **kwargs): 
DRIVER_CHOICES = [[driver, driver] for driver in self.extract_drivers(drivers)] 
ROUTE_CHOICES = [[route, route] for route in routes] 
super(DispatchForm, self).__init__(*args, **kwargs) 
self.fields['driver'].choices = DRIVER_CHOICES 
self.fields['route'].choices = ROUTE_CHOICES 

Он работал как ожидающий редактор

Смежные вопросы