Подтвердить что ты не робот

Django max_length для IntegerField

У меня есть это поле модели:

id_student = models.PositiveIntegerField(primary_key=True, max_length=10)

Ограничение max_length не работает. Я могу войти в админ и создать студента с идентификатором с более чем 10 символами. Как я могу это решить?

4b9b3361

Ответ 1

Django игнорирует max_length для целых полей и будет предупреждать вас в Django 1.8+. Подробнее см. билет 23801.

Вы можете использовать валидатор максимального значения,

from django.core.validators import MaxValueValidator

class MyModel(models.Model):
    ...
    id_student = models.PositiveIntegerField(primary_key=True, validators=[MaxValueValidator(9999999999)])

или используйте CharField для хранения идентификатора и используйте средство проверки регулярных выражений, чтобы убедиться, что идентификатор целиком сделан из цифр. Это имело бы преимущество, позволяя идентификаторам, начинающимся с нуля.

class MyModel(models.Model):
    ...
    id_student = models.CharField(primary_key=True, max_length=10, validators=[RegexValidator(r'^\d{1,10}$')])