Объедините несколько форм модели в одном виде создания в django - PullRequest
0 голосов
/ 12 июля 2020

У меня несколько моделей форм образуют несколько моделей. Мне нужна одна форма для отправки всех значений. Это означает, что мне нужно одно единственное представление для публикации всех данных моделей. Я не знаю, как это сделать. forms.py:

class EmployeeAddModelForm(forms.ModelForm):
    """
    Creates a form for employee invitations
    """
    class Meta:
        model = Employee
        fields = [
            'e_id',
            'first_name',
            'last_name',
            'gender',
            'religion',
]
class WorkExperienceForm(forms.ModelForm):
    """
    Creates a form for saving employee work experiences
    """
    class Meta:
        model = WorkExperience
        fields = [
            'previous_company_name',
            'job_designation',
            'from_date',
            'to_date',
            'job_description',
        ]
class EducationForm(forms.ModelForm):
    """
    Creates a form for saving educational info of an employee
    """
    class Meta:
        model = Education
        fields = [
            'institution_name',
            'degree',
            'passing_year',
            'result',]
       

У меня есть три модельных формы из трех моделей в form.py. Я хочу, чтобы мой createview унаследовал все эти модели и создал единую форму для публикации данных. views.py:

class EmployeeAddView(LoginRequiredMixin,CreateView):
    """
    Creates new employee
    """
    login_url = '/authentication/login/'
    template_name = 'employee/employee_add_form.html'
    form_class = EmployeeAddModelForm
    work_form_class = WorkExperienceForm
    queryset = Employee.objects.all()

    def form_valid(self, form):
        print(form.cleaned_data)
        return super().form_valid(form)

    def post(self, request, *args, **kwargs):
        form = self.form_class(request.POST)
        work_form = self.work_form_class(request.POST, prefix='work_form')
        print(form.errors)
        if form.is_valid() and work_form.is_valid():
            form.save(commit=True)
            work_form.save(commit=True)

            return redirect('employee:employee-list')
        return render(request, self.template_name, {'form': form, 'work_form': work_form})

    def get_success_url(self):
        return reverse('employee:employee-list')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...