Сохраняет ли метод create() объект модели в базе данных Django?
Я только что столкнулся с использованием create
методов в подклассе Djangos models.Model
. В Документации есть такой пример кода:
from django.db import models
class Book(models.Model):
title = models.CharField(max_length=100)
@classmethod
def create(cls, title):
book = cls(title=title)
# do something with the book
return book
book = Book.create("Pride and Prejudice")
Это уже сохраняет новый Book
объект в базу данных? Интуиция подсказывает, что метод save()
должен вызываться в строке # do something with the book
, иначе он не будет работать. Однако, когда я пытаюсь протестировать его, кажется, что добавление к нему save()
ни на что не влияет. Почему так происходит и как на самом деле происходит сохранение объекта в базу данных?
PS. Я столкнулся с этим, пытаясь изучить тестирование с помощью TestCase
. Если метод classmethod не сохраняет ничего в базу данных, проблема, вероятно, в моем коде тестирования, но это уже совсем другой вопрос.
Это уже сохраняет новый
Book
объект в базу данных?
Нет, он просто создает объект Book
с заданным названием, но он не сохраняется в базе данных, поэтому вы должны сохранить его:
book = Book.create('Pride and Prejudice')
book.save()
возможно, лучше работать с .objects.create(…)
[Django-doc], это вызовет сохранение с force_insert=True
, что немного оптимизирует вставку в базу данных:
class Book(models.Model):
title = models.CharField(max_length=100)
@classmethod
def create(cls, title):
# will store this in the database
book = cls.objects.create(title=title)
# do something with the book
return book
или с:
class Book(models.Model):
title = models.CharField(max_length=100)
@classmethod
def create(cls, title):
book = cls(title=title)
# will store this in the database
book.save(force_insert=True)
# do something with the book
return book