【发布时间】:2020-10-19 02:48:45
【问题描述】:
我在为 Django 使用带有 django-crispy-forms 的多个表单时遇到问题。
从文档中,我们必须在 out 表单中设置self.helper.form_tag = False。文档here
然后在 HTML 中使用 Form 标签包装表单。
class SearchForm(forms.Form):
X = forms.IntegerField(label='X', min_value=0, max_value=10)
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.helper = FormHelper
self.helper.form_method = 'post'
self.helper.form_tag = False
self.helper.layout = Layout(
'X',
Submit('submit', 'Submit', css_class='btn-success')
)
class PredictForm(forms.Form):
Y = forms.IntegerField(label='X', min_value=0, max_value=10)
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.helper = FormHelper
self.helper.form_method = 'post'
self.helper.form_tag = False
self.helper.layout = Layout(
'Y',
Submit('submit', 'Submit', css_class='btn-success')
)
然后在我的 HTML 文件中:
<form action="my_action" class="uniForm" method="post">
<div id="box" class="box">{% crispy formSearch formSearch.helper %}</div>
<div id="box2" class="box2">{% crispy formPrediction formPrediction.helper %}</div>
</form>
在我的 View.py 中:
def index(request):
if request.method == 'POST':
formSearch = SearchForm(request.POST)
formPrediction = PredictionForm(request.POST)
# Do stuff
else
formSearch = SearchForm()
formSearch.fields['X'].initial = 5
formPrediction = PredictionForm()
formSearch.fields['Y'].initial = 5
return render(request, 'index.html', {'formSearch': formSearch}, 'formPrediction': formPrediction)
我得到的是在我的网页上显示的 2 个清晰的表单,但第一个表单尝试加载第二个表单的字段。好像我的第二个表单是重复的。
我收到此错误:
KeyError:“在‘SearchForm’中找不到键‘Y’。选择是:X。”
它试图从PredictForm 获取数据,但知道只有X 在SearchForm 中。我以为是我在某个地方打错字了,但我找不到我的错误。
【问题讨论】:
标签: django django-forms django-crispy-forms