如何避免错误,而无需更改模型字段,则需要此字段吗?

时间:2019-07-30 07:59:46

标签: python django

如何避免在modellformset中发生错误This field is required,而又不更改模型字段并允许调用form_valid方法而不是form_invalid。也就是说,如果创建了模型,则所有字段都是必需的;如果这些字段为空,则它只是不保存模型,而是通过验证。现在,我知道必须填写所有表格,但是用户只能记住自己需要的内容,其余的留空。有解决办法吗?

views.py

class SkillTestCreateView(AuthorizedMixin, CreateView):
    model = Skill
    form_class = SkillCreateForm
    template_name = 'skill_create.html'

    def get_context_data(self, **kwargs):
        context = super(SkillTestCreateView, self).get_context_data(**kwargs))
        context['formset_framework'] = SkillFrameworkFormSet(queryset=Skill.objects.none())
        context['formset_planguage'] = SkillPLanguageFormSet(queryset=Skill.objects.none())
        context['tech_group'] = Techgroup.objects.all()
        return context

    def post(self, request, *args, **kwargs):
        if 'framework' in request.POST:
            form = SkillFrameworkFormSet(self.request.POST)
            if form.is_valid():
                return self.form_valid(form)
            else:
               return self.form_invalid(request)
        elif 'language' in request.POST:
            form = SkillPLanguageFormSet(self.request.POST)
            if form.is_valid():
                return self.form_valid(form)
            else:
                return self.form_invalid(request)

        else:
            return self.form_invalid(request)

    def form_valid(self, form):
        """If the form is valid, redirect to the supplied URL."""
        for form in form:
            self.object = form.save(commit=False)
            self.object.employee =Employee.objects.get(pk=self.kwargs['pk'])
            employee_current_technology = Technology.objects.filter(skill__employee__id=self.kwargs['pk'])
            if self.object.technology not in employee_current_technology:
                self.object.save()
        return redirect("profile", pk=self.kwargs['pk'])

    def form_invalid(self, request):
        return render(request, 'skill_create.html',
                      {'formset_framework': SkillFrameworkFormSet(queryset=Skill.objects.none()),
                       'formset_planguage': SkillPLanguageFormSet(queryset=Skill.objects.none())})

我的行为是我需要在页面标准上为modelformset填写所有表单吗?

0 个答案:

没有答案