如何避免在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填写所有表单吗?