【问题标题】:Rendering several forms with helpers Crispy Django使用助手 Crispy Django 渲染多个表单
【发布时间】: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 获取数据,但知道只有XSearchForm 中。我以为是我在某个地方打错字了,但我找不到我的错误。

【问题讨论】:

    标签: django django-forms django-crispy-forms


    【解决方案1】:

    答案如下:

    两种形态之间的碰撞战争,为什么?因为我没有正确启动每个表单功能。

    我变了

    self.helper = FormHelper
    

    self.helper = FormHelper(self)
    

    【讨论】:

      猜你喜欢
      • 2012-06-29
      • 2014-12-07
      • 1970-01-01
      • 2014-03-12
      • 2019-07-08
      • 1970-01-01
      • 1970-01-01
      • 2016-02-28
      • 1970-01-01
      相关资源
      最近更新 更多