Разница между созданием или вызовом класса в ORM - PullRequest
0 голосов
/ 22 ноября 2018

Предположим, у меня есть класс с именем Dude в модели django.

class Dude(models.Model):
    id = models.BigIntegerField(primary_key=True)
    name = models.CharField(max_length=100)

Я могу создать экземпляр Person в БД, вызвав Dude.objects.create(name='Pepe') или Dude(name='Pepe').

У меня вопрос, в чем разница и какой метод лучше.

Ответы [ 2 ]

0 голосов
/ 22 ноября 2018

Строка Dude.objects.create(name='Pepe') создает объект в БД и возвращает его.Вы можете увидеть, что он уже был сохранен в БД, проверив его pk:

>>> obj = Dude.objects.create(name='Pepe')
>>> obj.pk
1

Строка Dude(name='Pepe') создает объект в памяти, но еще не сохраняет в базу данных:

>>> obj = Dude(name='Pepe')
>>> obj.pk                       # will be 'None'
>>> obj.save()
>>> obj.pk
1
0 голосов
/ 22 ноября 2018

Первый сначала создает объект в БД, а затем вы можете использовать его.

С помощью Dude(name='Pepe') вы получите объект, который не находится в дБ перед вызовом .save()

Если в вашей модели много обязательных полей, вы должны включить все в вызов .create().иначе это то же самое.

...