【发布时间】:2019-07-20 12:54:41
【问题描述】:
首先,我做了功课并尝试找到一个类似的问题:)。在过去的几个小时里,我一直在尝试,但无济于事。
我想做的事情看起来很简单。我在 Formwizard 中有几个表格。在第一种形式中,我有一个文本输入。在下一步中,我有一个 FormSet(但这也可能是一个简单的 Form),其中包含一个 forms.Select(下拉菜单)。我想在这个下拉列表中显示文本输入的值。但是,我就是无法让它工作。这是我的代码:
在forms.py中:
class FirstForm(forms.Form):
first_point = forms.CharField(
widget=forms.TextInput(
attrs={
'class' : 'form-control'
}))
class SecondStepForm(forms.Form):
dropdown_select = forms.ChoiceField(
widget=forms.Select(
attrs={'class' : 'form-control'
}))
SecondStepFormSet = formset_factory(SecondStepForm, extra=5)
在views.py中:
FORMS = [("firstform", FirstForm),
("secondform", SecondStepFormSet)]
class FormWizardView(LoginRequiredMixin, SessionWizardView):
template_name = 'test.html'
def get_context_data(self, form, **kwargs):
context = super(FormWizardView, self).get_context_data(form=form, **kwargs)
if self.steps.current == 'secondform':
data_temp = self.get_cleaned_data_for_step('firstform')
data = data_temp['first_point']
print(data)
context.update({'dropdown_select': data})
return context
def done(self, form_list, **kwargs):
return None
在我的 html 文件中:
{% block content %}
<div class="row">
<div class="col-md-12">
<form action="" method="post">{% csrf_token %}
<table>
{{ wizard.management_form }}
{% if wizard.form.forms %}
{{ wizard.form.management_form }}
{% for form in wizard.form.forms %}
<div>
{{ form.dropdown_select }}
</div>
{% endfor %}
{% else %}
{% for field in wizard.form %}
{{field}}
{% endfor %}
{% endif %}
</table>
{% if wizard.steps.prev %}
<button name="wizard_goto_step" type="submit" value="{{ wizard.steps.prev }}"
class="btn btn-danger btn-sm"
style="width:30%; float:left;">{% trans "Previous" %}</button>
{% endif %}
<input type="submit" value="{% trans "Next" %}"
class="btn btn-danger btn-sm"
style="width:30%; float:right;"/>
</form>
</div>
</div>
{% endblock %}
views.py 中的print(data) 语句会打印文本输入中的值。而且,当我将{{ form.dropdown_select }} 更改为{{ dropdown_select }} 时,模板上的值将更改为我的文本输入值。所以一切顺利。我只是无法让它填充下拉列表。
任何想法如何做到这一点?希望 Stackoverflow 可以再次帮助我(就像它总是这样:))。非常感谢!
【问题讨论】:
-
我自己的部分问题有一个解决方案!我现在可以为表单(还不是表单集)做这件事。我添加了 get_form 函数(如果我也将它用于 Formset,将作为答案发布以供将来参考)。但是,我收到表单集的错误:
FormSet' object has no attribute 'fields'。当用for form in formset.forms:包装我的 get_from 函数时,错误不会消失。有人对此有任何想法吗?
标签: django django-forms django-formwizard