Django bulk_create() с полями моделей, имеющими пользовательские валидаторы

В моем приложении Django я использую bulk_create(). Для одного из полей в целевой модели я назначил набор валидаторов для ограничения допустимого значения заглавными буквами (алфавитами) и фиксированной длиной "3", как показано ниже:

class Plant(models.Model):
    plant = models.CharField(primary_key=True, max_length=4, ...
    plant_name = models.CharField(max_length=75, ...
    plant_short_name = models.CharField(max_length=3, validators=[...
    # rest of the fields ...

Я ограничиваю поле plant_short_name чем-то вроде CHT, скажем, Plant Charlotte.

Используя исходный файл (.csv), я могу успешно создавать новые экземпляры с помощью bulk_create, однако я обнаружил, что данные сохраняются даже при другом значении поля plant_short_name.

Например, если я использую источник как:

plant,plant_name,plant_short_name
9999,XYZ Plant,XY

новый экземпляр по-прежнему создается, хотя длина (строкового) значения поля plant_short_name составляет только 2 (вместо 3, как определено в валидаторах).

Если я использую онлайн функцию create (скажем, Django CreateView), валидаторы работают как ожидалось.

Как контролировать / ограничить создание экземпляра модели, когда в исходном файле используется значение поля неправильной длины?

С помощью валидаторов.

Как описано в документации max_length является не более чем валидатором:

Требуется. Максимальная длина (в символах) поля. Значение max_length обеспечивается на уровне базы данных и в Django's валидации с помощью MaxLengthValidator.

Это означает, что вы не ограничиваете минимальное количество символов в строке. Для этого необходим MinLengthValidator.

Вернуться на верх