Как построить чистый метод для formset? - PullRequest
0 голосов
/ 16 мая 2019

Я переопределил clean() метод формы, и у меня был набор форм этой формы.Проблема в том, что метод clean() не вызывается, я думаю, проверка не работает, и я не понимаю, почему.Вы можете мне помочь ?Возможно, я (наверняка) делаю что-то не так?

forms.py

class SetUpdateForm(forms.ModelForm):

    class Meta:
        model = Set
        fields = [
            'scoreTeam1',
            'scoreTeam2',
            'match',
        ]

        def clean(self):
            cleaned_data = super().clean()
            scoreTeam1 = cleaned_data.get("scoreTeam1")
            scoreTeam2 = cleaned_data.get("scoreTeam2")
            sport = cleaned_data.get("match").phase.tournament.sport

            if scoreTeam1 and scoreTeam2:
                print("a")
                if scoreTeam1 < sport.nbPointPerSet and scoreTeam2 < sport.nbPointPerSet or scoreTeam1 > sport.nbPointPerSet and scoreTeam2 > sport.nbPointPerSet:
                    raise forms.ValidationError("A set is played in" + str(sport.nbPointPerSet) + " points")
                if scoreTeam1 == scoreTeam2:
                    raise forms.ValidationError("Scores can't be equal")
                return cleaned_data



MatchSetFormset = forms.inlineformset_factory(Match, Set, form=SetUpdateForm, min_num=1, extra=0, can_delete=False)

Обычно метод должен вызываться каждый раз при проверке формы?Я не понимаю.

Редактировать:

forms.py

class SetUpdateForm(forms.ModelForm):

    class Meta:
        model = Set
        fields = [
            'scoreTeam1',
            'scoreTeam2',
            'match',
        ]

class MatchSetFormset(forms.inlineformset_factory(Match, Set, form=SetUpdateForm, min_num=1, extra=0, can_delete=False)):
    def clean(self):
        super(MatchSetFormset, self).clean()

        for form in self.forms:
            if not form.is_valid():
                continue

            scoreTeam1 = form.cleaned_data["scoreTeam1"]
            scoreTeam2 = form.cleaned_data["scoreTeam2"]
            if scoreTeam1 > form.cleaned_data["match"].phase.tournament.sport.nbPointPerSet:
                raise forms.ValidationError("error")

Я пробовал, на самом деле это работает, но я непочему у меня ошибка?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...