Django Инструменты формы не работают с Dynami c Formsets - PullRequest
0 голосов
/ 23 марта 2020

Кто-нибудь, кто работал с интеграцией Django форм-инструментов с Dynami c Formsets? У меня есть 7 форм в мастере форм, и в одной из форм я пытаюсь добавить / удалить столько вопросов, сколько я могу динамически. Однако когда я отправляю мастер, сохраняется только один из вопросов (последний ввод текста) независимо от того, сколько я добавил. Ниже мое окно мастера

class JobWizard(SessionWizardView):
    form_list=[JobForm7FormSet,JobForm1,JobForm2,JobForm3, JobForm4,JobForm5,JobForm6 ]
    file_storage= FileSystemStorage(location=os.path.join(settings.MEDIA_ROOT, 'jobs'))
    template_name="jobs/jobforms.html"

    def get_template_names(self):
        return [TEMPLATES[self.steps.current]] 
    def done(self, form_list, form_dict, **kwargs):
        form_dict = self.get_all_cleaned_data()
        categories = form_dict.pop('categories')
        sub_categories = form_dict.pop('sub_categories')
        # job_question=form_dict.pop('formset-0', None)
        # print(job_question1)
        print("_________________________")
        job_question = form_dict.pop('job_question')

        job=Job.objects.create(**form_dict)
        job.categories=categories
        job.job_question=job_question 
        print("_________________________")  
        for sub_category in sub_categories:
            job.sub_categories.add(sub_category)
        # for question in job_question:
        #     job.job_question.append(question)
        job.save()   
        return redirect('job_list')

А мой файл forms.py такой, как показано ниже. Я использую формы модели и создаю набор форм из формы модели.

class JobForm7(forms.ModelForm):

    class Meta:
        model = Job
        fields = ['job_question']

JobForm7FormSet = modelformset_factory(Job,extra=1,max_num=10, fields=('job_question',), form=JobForm7)  

Рендеринг в моем шаблоне, как показано ниже:

{% block content %}
<p>Step {{ wizard.steps.step1 }} of {{ wizard.steps.count }}</p>
<form action="" method="post" enctype="multipart/form-data" id="job-question">{% csrf_token %}
<table>
{{ wizard.management_form }}
{% if wizard.form.forms %}
    {{ wizard.form.management_form }}
    {% for form in wizard.form.forms %}
        {{ form |crispy }}

    {% endfor %}
{% else %}
    {{ wizard.form }}
{% endif %}
</table>
{% if wizard.steps.prev %}
<button name="wizard_goto_step" type="submit" value="{{ wizard.steps.first }}">{% trans "first step" %}</button>
<button name="wizard_goto_step" type="submit" value="{{ wizard.steps.prev }}">{% trans "prev step" %}</button>
{% endif %}
<input type="submit" value="{% trans "submit" %}"/>
</form>


<script type="text/javascript" src="{% static 'js/jquery-min.3.4.1.js' %}"></script>
<script type="text/javascript" src="{% static 'js/jquery.formset.js' %}"></script>
<script type="text/javascript">
    $(function() {
        $('#job-question table tr').formset();
    })
</script>

{% endblock %}

Кто-нибудь с какой-нибудь идеи? Когда я передаю набор форм в список форм, он отображает все дополнительные поля вместо одного поля и позволяет динамически добавлять другие. Форма в мастере отображается сначала, как показано ниже:

Initial form render before adding extra fields

Затем выглядит как показано ниже после добавления нескольких полей вопроса:

Form render after adding fields

...