Как можно избежать ошибки This field is required в modellformset не меняя поля модели и позволяя вызывать метод form_valid вместо form_invalid. Т.е если модель создается, то все поля обязательны, если поля пустые то просто не сохраняет модель но валидацию проходит. У меня сейчас получается что все формсеты обязательно должны быть заполнены, но ведь пользователь может запонить только нужные ему, а остальные оставить пустыми. Есть решение? Это вообще стандартное поведение такое у формсетов, что все должно быть заполнено?
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())})