Django Показывает хрустящую форму {'id': ['Это поле обязательно для заполнения.']} - PullRequest
0 голосов
/ 20 января 2020

Я получаю следующую ошибку, когда нажимаю кнопку «Сохранить» в своем встроенном наборе форм с использованием хрустящих форм:

[{'id': ['Это поле обязательно для заполнения.']}, {'Id ': [' Это поле обязательно для заполнения. ']}, {' 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>

1 Ответ

0 голосов
/ 09 февраля 2020

При рендеринге форм с макетами как частью набора форм вы должны установить render_hidden_fields = true. См. Больше примечаний в документации.

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

...