Я создал собственный валидатор, который проверяет, меньше ли верхнее число в RangeField
некоторого числа.
Проблема в том, что я вижу в режиме отладки, что Validator.compare
возвращает False
, но Django
вызывает DataError
Значение "21474834555" выходит за пределы допустимого диапазона для целочисленного типа LINE 1: ...NULL, "cena" = NULL, "poznamka" = '', "rozloha" = '[ -214748...
Я не могу понять, почему он вызывает эту ошибку, когда он должен поднять ValidationError
до этого.
Я знаю, что это число вне допустимого диапазона, поэтому я создал файл Validator
.
ПОСМОТРЕТЬ
class DopytUpdateView(LoginRequiredMaklerAccessMixin, UpdateView):
model = Dopyt
form_class = DopytForm
template_name = 'dopyty/dopyt.html'
ФОРМА
class DopytForm(forms.ModelForm):
class Meta:
model = Dopyt
fields = [...'rozloha',...]
ВАЛИДАТОР
class RangeCompleteMaxValueValidator(MaxValueValidator):
def compare(self, a, b):
upper_ok = (a.upper > b) if a.upper else True
lower_ok = (a.lower > b) if a.lower else True
return upper_ok and lower_ok
МОДЕЛЬ
class Dopyt(TimeStampedModel):
...
rozloha = IntegerRangeField(null=True, blank=True, verbose_name='Rozloha [m2]',
validators=[RangeCompleteMinValueValidator(-2147483648),
RangeCompleteMaxValueValidator(2147483647)])
Знаете, почему он так себя ведет?
ИЗМЕНИТЬ
Как видите, валидатор возвращает False
a.upper
наверное должно бытьa.upper()
? - person Willem Van Onsem   schedule 09.07.2018a
иb
это не строки, это диапазоны? - person Willem Van Onsem   schedule 09.07.2018