首页 > 解决方案 > 在 django 中将多个模型组合在一个创建视图中

问题描述

我有多个模型表单形成多个模型。我想要一个表单来提交所有值。这意味着我想要一个用于发布所有模型表单数据的 createview。我不知道该怎么做。表格.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 继承所有这些模型表单并创建一个用于发布数据的表单。视图.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')

标签: pythondjangoformsmodel

解决方案


推荐阅读