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 ...

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

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

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

      plant,plant_name,plant_short_name
9999,XYZ Plant,XY

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

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

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

1 ответ

массовое_создание ():

Этот метод эффективно вставляет предоставленный список объектов в базу данных (обычно только 1 запрос, независимо от количества объектов). Кроме того, не вызывает save() для каждого из экземпляров, не отправляет никаких сигналов pre/post_save.

Кefficient mannerзначит проверки нет. Вы можете изучить больше кода функции вdjango/models/db/query.pyвнутри окружающей среды.

Другие вопросы по тегам