我正在动态创建一些表单字段,如本问题所示:
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
模板:
^{pr2}$视图
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)”
在本例中,它告诉我错误在{表格状态}}. 我怀疑这与我修改的forms 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">
我想我发现了问题,我正在将*args和**kwargs传递给构造函数,但是当我从这里改过来时:
为此:
^{pr2}$正如预期的那样。在
相关问题 更多 >
编程相关推荐