Как проверить валидацию IntegerField? - PullRequest
0 голосов
/ 09 мая 2019

У меня есть форма, в которой есть IntegerField, это поле не является обязательным. Когда я отправляю свою форму, я хотел бы проверить, правильно ли заполнено это поле. Допускаются только 3, 4 или пустое поле.

forms.py

class PhaseCreationForm(forms.ModelForm):
    typePhase               = forms.CharField(label='Type of phase', widget=forms.TextInput(attrs={
                                    'class':'form-control',
                                    'placeholder': 'Enter the type of the phase'}))
    nbTeamPerPool           = forms.IntegerField(label='Number of teams per pool', required=False, widget=forms.NumberInput(attrs={
                                    'class':'form-control',
                                    'placeholder':'3 or 4'}))
    nbTeamQualified         = forms.IntegerField(label='Number of qualified', widget=forms.NumberInput(attrs={
                                    'class':'form-control',
                                    'placeholder':'Enter the number of qualified'}))
    category                = MyModelChoiceField(queryset=Category.objects.all(), widget=forms.Select(attrs={
                                    'class':'form-control'}))
    class Meta:
        model = Phase
        fields = [
            'typePhase',
            'nbTeamPerPool',
            'nbTeamQualified',
            'category',
        ]

def clean_nbTeamPerPool(self, *args, **kwargs):
        nbTeamPerPool = self.cleaned_data.get("nbTeamPerPool")
        if nbTeamPerPool < 3 or nbTeamPerPool > 4:
            raise forms.ValidationError("The number of team per pool is between 3 and 4. Please try again.")
        return nbTeamPerPool

Когда поле пусто, у меня есть это ошибка :

'<' не поддерживается между экземплярами 'NoneType' и 'int' <Br>

Я понимаю эту ошибку, я просто не могу сравнить None с целым числом, поэтому мой вопрос: как я могу сравнить ни одно с целым числом, или вы можете предложить мне решение, чтобы пустое поле было принято?

Edit: У меня есть другой вопрос, который пришел ко мне сейчас. Как вы видите, в моей форме есть поле "категория", это внешний ключ к модели "Категория", и я хотел бы знать, как я могу получить доступ к полям категории в методе clean?

1 Ответ

0 голосов
/ 09 мая 2019

Просто проверьте, есть ли какое-либо значение, а затем выполните проверку:

def clean_nbTeamPerPool(self, *args, **kwargs):
    nbTeamPerPool = self.cleaned_data.get("nbTeamPerPool")
    if nbTeamPerPool:
            if nbTeamPerPool < 3 or nbTeamPerPool > 4:
                raise forms.ValidationError("The number of team per pool is between 3 and 4. Please try again.")
    return nbTeamPerPool
...