Как установить диапазон для положительного целого числа, где верхняя граница будет входом из другого поля? - PullRequest
1 голос
/ 21 марта 2020

Предположим, у меня есть две переменные A и B, обе являются натуральными числами. A не может быть меньше 1, B не может быть больше A.

В моих моделях у меня есть что-то вроде этого:

A = models.PositiveIntegerField(validators=[MinValueValidator(1)])
B = models.PositiveIntegerField(validators=[MaxValueValidator(A)])

Это дает мне следующую ошибку:

TypeError: '<=' not supported between instances of 'PositiveIntegerField' and 'int'

Может кто-нибудь подсказать, как реализовать этот вид логики c?

1 Ответ

1 голос
/ 21 марта 2020

Вы выполняете проверку, охватывающую несколько полей в методе .clean() [Django -doc] :

from django.core.exceptions import ValidationError

class MyModel(models.Model):
    a = models.PositiveIntegerField(validators=[MinValueValidator(1)])
    b = models.PositiveIntegerField()

    def <b>clean</b>(self):
        if self.b > self.a:
            raise ValidationError('a should be greater than or equal to b.')

Поскольку они не являются полевыми c ошибками, в случае использования ModelForm эти ошибки будут отображаться как {{ form.non_field_errors }}. Для получения дополнительной информации см. 1014 * Визуализация полей вручную раздел документации .

Вы можете указать его c для поля, передав ValidationError a словарь с ключом название поля:

from django.core.exceptions import ValidationError

class MyModel(models.Model):
    a = models.PositiveIntegerField(validators=[MinValueValidator(1)])
    b = models.PositiveIntegerField()

    def clean(self):
        if self.b > self.a:
            raise ValidationError(<b>{'b':</b> 'a should be greater than or equal to b.'<b>}</b>)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...