Django, ValidationError в BaseModelFormSet - PullRequest
0 голосов
/ 23 марта 2019

Я использую BaseModelFormSet и передал его в modelformset_factory в представлениях. И внутри функции BaseModelFormSet я переопределяю clean (), чтобы сделать проверку набора форм для повышения ошибки проверки. Проблема заключается в том, что когда я пытаюсь заполнить набор форм неверными данными, проверкаошибка не отображается вообще

Я пытался выполнить рендеринг из шаблона вручную с ошибками, не относящимися к полю, но не работал, и просмотрел документацию https://docs.djangoproject.com/en/2.1/topics/forms/modelforms/#overriding-clean-on-a-modelformset

ОБНОВЛЕНИЕ: если я намеренно заполнил формус неверными данными, он будет проверять только первую форму в наборе форм, а не все fomrs (дополнительные 2)

forms.py

class MyModelFormSet(BaseModelFormSet):
    def clean(self):
        super().clean()
        if any(self.errors)
            return

        for form in self.forms:
            debit = form.cleaned_data['debit']
            if debit == 100:
                raise forms.ValidationError('debit is 100!')
            return debit

views.py

def postpage(request):
    journalLineFormSet = modelformset_factory(journalLine,exclude=('journalNumber',),extra=2,can_delete=True,formset=MyModelFormSet,max_num=2,validate_max=True)
    if request.method == 'POST':
        mainform = journalForm(request.POST)
        subform = journalLineFormSet(request.POST)
        if mainform.is_valid() and subform.is_valid():
            instances = subform.save(commit=False)
            for instance in instances:
                instance.save()
            mainform.save()


            return HttpResponseRedirect('/myacc/posted/')

    else:
        ##linesform = linesform(queryset=journal.objects.all().none())
        mainform = journalForm()
        subform = journalLineFormSet(queryset=journalLine.objects.all().none()) #prefix used if you want to set a cumstom prefix to from name

    return render(request,'myacc/post.html',{'mainform': mainform, 'subform': subform})
...