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.