Метод save

Метод save применяется к экземпляру модели и сохраняет его в базу данных. При вызове метода Django выполняет операцию INSERT, если объект новый, или UPDATE, если он уже существует в базе. Метод принимает необязательные параметры, которые управляют процессом сохранения.

Синтаксис

pythoninstance.save(force_insert=False, force_update=False, using=None, update_fields=None)

Параметры метода

Пример . Сохранение нового объекта

Давайте создадим новую статью и сохраним её в базу данных:

pythonfrom myapp.models import Article
from django.utils import timezone

article = Article(
  title="My first article",
  content="This is the content of my first article.",
  created_at=timezone.now()
)
article.save()
print(f"Article saved with ID: {article.id}")

Результат выполнения кода:

python"Article saved with ID: 1"

Пример . Обновление существующего объекта

Давайте найдём существующую статью, изменим её заголовок и сохраним изменения:

pythonfrom myapp.models import Article

article = Article.objects.get(id=1)
article.title = "My updated article"
article.save()
print(f"Article title updated: {article.title}")

Результат выполнения кода:

python"Article title updated: My updated article"

Пример . Использование параметра update_fields

Давайте обновим только заголовок статьи, не затрагивая другие поля:

pythonfrom myapp.models import Article

article = Article.objects.get(id=1)
article.title = "Article with limited fields updated"
article.save(update_fields=['title'])
print("Only the title field was updated")

Результат выполнения кода:

python"Only the title field was updated"

Пример . Переопределение метода save

Переопределим метод save в модели, чтобы автоматически заполнять поле slug на основе заголовка перед сохранением:

pythonfrom django.db import models
from django.utils.text import slugify

class Article(models.Model):
  title = models.CharField(max_length=200)
  slug = models.SlugField(unique=True)
  content = models.TextField()

  def save(self, *args, **kwargs):
    if not self.slug:
      self.slug = slugify(self.title)
    super().save(*args, **kwargs)

article = Article(
  title="How to use Django save method",
  content="This article explains the save method."
)
article.save()
print(f"Slug generated: {article.slug}")

Результат выполнения кода:

python"Slug generated: how-to-use-django-save-method"

Пример . Использование параметра force_insert

Давайте принудительно вставим объект как новый, даже если он может существовать в базе:

pythonfrom myapp.models import Article

article = Article(
  title="Force insert example",
  content="This article is forced to be inserted."
)
article.save(force_insert=True)
print(f"Article forced inserted with ID: {article.id}")

Результат выполнения кода:

python"Article forced inserted with ID: 2"

Смотрите также

  • метод delete,
    который удаляет объект из базы данных
  • метод refresh_from_db,
    который обновляет объект из базы данных
  • сигнал pre_save,
    который отправляется перед сохранением объекта
  • сигнал post_save,
    который отправляется после сохранения объекта