【问题标题】:Django Crispy Form Shows {'id': ['This field is required.']}Django Crispy 表单显示 {'id': ['This field is required.']}
【发布时间】:2020-01-20 06:07:05
【问题描述】:

当我使用 Crispy Forms 单击内联表单集上的保存按钮时收到以下错误:

[{'id': ['此字段为必填项']}, {'id': ['此字段为必填项']}, {'id': ['此字段为必填项'] }、{}、{}]

由于缺少 id,formset 已绑定但无效,但我不确定如何设置 id。

#views.py
    class View(LoginRequiredMixin, TemplateView):
        template_name = "example.html"
        MyFormSet = modelformset_factory(
            model=MyModel,
            form=MyModelForm,
            formset=MyModelFormset,
            can_delete=True,
            extra=1,
            fields=('field_1','field_2', ))

        def get_context_data(self, **kwargs):
            context = super().get_context_data(**kwargs)
            my_formset = self.MyFormSet()
            context['my_formset'] = MyModel.objects.all().order_by('field_1')
            return context

        def post(self, request, *args, **kwargs):
            my_formset = self.MyFormSet(request.POST, request.FILES)
            if my_formset.is_valid():
                try:
                    my_formset.save()
                except:
                    messages.add_message(request, messages.ERROR, 'Cannot delete: this parent has a child 1 !')
            else:
                context = self.get_context_data()
                context['my_formset'] = my_formset
                return render(request, self.template_name, context)
            return HttpResponseRedirect(reverse_lazy("example"))

#forms.py
    class MyForm(forms.ModelForm):
        class Meta:
            model = MyModel
            fields = ['field_1', 'field_2']


        def __init__(self, *args, **kwargs):
            super().__init__(*args, **kwargs)
            self.helper = FormHelper()
            self.helper.form_tag = False
            self.helper.layout = Layout(
                Row(
                    Column('field_1'),
                    Column('field_2'),
                    Column('DELETE'),
                )
            )



#template
    <form action="" enctype="multipart/form-data" method="post">{% csrf_token %}        
        {{ my_formset.management_form|crispy }}
        {% for form in my_formset.forms %}
            {% crispy form form.helper %}                            
        {% endfor %}
        <button class="btn btn-success" type="submit">Save</button>
    </form>

【问题讨论】:

    标签: django django-crispy-forms inline-formset


    【解决方案1】:

    当呈现带有布局的表单作为表单集的一部分时,您必须设置 render_hidden_​​fields = true。查看文档中的更多注释。

    https://django-crispy-forms.readthedocs.io/en/latest/form_helper.html

    【讨论】:

      猜你喜欢
      • 2021-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-27
      • 2022-11-07
      • 2018-11-07
      • 1970-01-01
      • 2016-09-12
      相关资源
      最近更新 更多