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
внутри окружающей среды.