Несколько форм за один шаг, Django Wizard form

Я пытаюсь создать 2 модельные формы в одном шаге, одна из них Modelformset, кто-нибудь делал это раньше, будет очень полезно, если я получу какой-нибудь рабочий код. Я использую Django 2 в своем проекте. Спасибо.

my Forms.py

<<<Я пытаюсь создать формы, main_image и набор форм в один шаг. Это работает, но я не могу получить экземпляр набора форм, поэтому я не могу сохранить его.

class step3Form(forms.ModelForm):
    main_image = forms.FileField(widget=forms.FileInput(attrs={'class': 'custom-control'}), required=True, label=_('Hauptbild:'))
    formsetfield = modelformset_factory(PostImages, ImageForm, can_delete=True)
    class Meta:
        model = Post
        fields = ('main_image',)
    def __init__(self, *args, **kwargs):
        super(step3Form, self).__init__(*args, **kwargs)

views.py

class PostCreateView(LoginRequiredMixin, SessionWizardView):
    instance = None
    form_list = [PostForm, PostFormSecondStep, step3Form, step4Form]
    file_storage = FileSystemStorage(location=os.path.join(settings.MEDIA_ROOT, 'media'))

    def get_template_names(self):
        return [TEMPLATES[self.steps.current]]

    def get_form_instance(self, step):
        if self.instance is None:
            self.instance = Post()
        return self.instance

    def done(self, form_list, form_dict, **kwargs):
        form_data_dict = self.get_all_cleaned_data()
        result = {}
        self.instance.author = self.request.user.profile
        form_list[2].save()
        self.instance.save()
        form_data =  [form.cleaned_data for form in form_list]
        return redirect('post_app:post_create_page')

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        return context

html

          <form method="post" id="msform" enctype="multipart/form-data">
            {% csrf_token %}
            {{ wizard.management_form }}
            {% if wizard.form.forms %}
            {% for form in wizard.form.forms %}
                          {{ form }}
                          {% endfor %}
                {% else %}
                {% if wizard.form.non_field_errors %}
                    <ul>
                      {% for error in wizard.form.non_field_errors %}
                      <li>{{ error }}</li>
                      {% endfor %}
                    </ul>
                    {% endif %}
                    {{ wizard.form.main_image.label_tag }}
                    {{ wizard.form.main_image }}
                    {{ wizard.form.main_image.errors }}
                    {{ wizard.form.formsetfield.errors }}
                <div id="formset" data-formset-prefix="{{ wizard.form.formsetfield.prefix }}">
                  {{ wizard.form.formsetfield.management_form }}
                  <div data-formset-body>
                    {% for form in wizard.form.formsetfield %}
                    {{ form.non_field_errors }}
                      {{ form.errors }}
                    <div data-formset-form>
                      {{ form }}
                      <span class="p-2"><a class="cursor-pointer" data-formset-delete-button><i class="far fa-trash-alt"></i></a></span>
                    </div>
                    {% endfor %}
                  </div>
                  
                  <input type="button" class="btn btn-outline-dark" value="Hinzufügen" data-formset-add>
                </div>
            {% endif %}
            <button type="submit" id="submit_btn" class="action-button" name="button">Weiter</button>
            {% if wizard.steps.prev %}
            <button name="wizard_goto_step" class="action-button" type="submit" value="{{ wizard.steps.first }}">Erster Schritt</button>
            <button name="wizard_goto_step" id="back_btn" class="action-button" type="submit" value="{{ wizard.steps.prev }}">Zurück</button>
            {% endif %}
          </form>

попробуйте это в функции based:

Forms.py

  class step3Form(forms.ModelForm):
        class Meta:
            model = Post
            fields = ('main_image',)

view.py

from django.forms import modelformset_factory

def create(request):
    formset = modelformset_factory(
                    Post,
                    form=step3Form,
                    fields=('main_image'),
                    extra=1,
                    can_delete=True
                )
    if request.method == 'POST':
       form = formset(request.POST, prefix='post')
       if form.is_valid()
          post = form.save(commit=False)
          for row in post:
              row.userID = request.user
              row.save()
          form.save()
    context['form']=formset(queryset=Post.objects.none(), prefix='post')
    return render(request, 'post/form.html',context=context)
Вернуться на верх