Какая разница между запуском двух команд:
foo = FooModel()
и
bar = BarModel.objects.create()
Второй немедленно создает BarModel
в базе данных, в то время FooModel
как save()
метод должен вызываться явно, чтобы добавить его в базу данных?
Какая разница между запуском двух команд:
foo = FooModel()
и
bar = BarModel.objects.create()
Второй немедленно создает BarModel
в базе данных, в то время FooModel
как save()
метод должен вызываться явно, чтобы добавить его в базу данных?
Ответы:
https://docs.djangoproject.com/en/stable/topics/db/queries/#creating-objects
источник
Два синтаксиса не эквивалентны, и это может привести к неожиданным ошибкам. Вот простой пример, показывающий различия. Если у вас есть модель:
И вы создаете первый объект:
Затем вы пытаетесь создать объект с тем же первичным ключом:
источник
.create()
создает объект, даже если обязательное поле (null=False
) отсутствует? Я добавляю тесты в свой проект иcreate
CharField
даже если установлено значение «null=False
не», это не вызовет ошибку, если не указано""
null
obj = MyModel()
, тогдаobj.full_clean()
пока.ОБНОВЛЕНИЕ 15.3.2017:
Я открыл Django-проблему по этому вопросу, и она, кажется, предварительно принята здесь: https://code.djangoproject.com/ticket/27825
Мой опыт показывает, что при использовании класса
Constructor
(ORM
) по ссылкам с Django1.10.5
в данных могут быть некоторые несоответствия (т. Е. Атрибуты созданного объекта могут получить тип входных данных вместо приведенного типа свойства объекта ORM). :models
some_test.py
-object.create
some_test.py
-Constructor()
источник