Метод save
Метод save применяется к экземпляру модели и сохраняет
его в базу данных. При вызове метода Django выполняет
операцию INSERT, если объект новый, или UPDATE, если
он уже существует в базе. Метод принимает необязательные
параметры, которые управляют процессом сохранения.
Синтаксис
instance.save(force_insert=False, force_update=False, using=None, update_fields=None)
Параметры метода
- force_insert - принудительное выполнение операции INSERT, даже если объект уже существует
- force_update - принудительное выполнение операции UPDATE, даже если объект новый
- using - имя базы данных, в которую будет сохранён объект
- update_fields - список полей, которые необходимо обновить при сохранении
Пример . Сохранение нового объекта
Давайте создадим новую статью и сохраним её в базу данных:
from 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}")
Результат выполнения кода:
"Article saved with ID: 1"
Пример . Обновление существующего объекта
Давайте найдём существующую статью, изменим её заголовок и сохраним изменения:
from myapp.models import Article
article = Article.objects.get(id=1)
article.title = "My updated article"
article.save()
print(f"Article title updated: {article.title}")
Результат выполнения кода:
"Article title updated: My updated article"
Пример . Использование параметра update_fields
Давайте обновим только заголовок статьи, не затрагивая другие поля:
from 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")
Результат выполнения кода:
"Only the title field was updated"
Пример . Переопределение метода save
Переопределим метод save в модели, чтобы автоматически
заполнять поле slug на основе заголовка перед сохранением:
from 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}")
Результат выполнения кода:
"Slug generated: how-to-use-django-save-method"
Пример . Использование параметра force_insert
Давайте принудительно вставим объект как новый, даже если он может существовать в базе:
from 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}")
Результат выполнения кода:
"Article forced inserted with ID: 2"
Смотрите также
-
метод
delete,
который удаляет объект из базы данных -
метод
refresh_from_db,
который обновляет объект из базы данных -
сигнал
pre_save,
который отправляется перед сохранением объекта -
сигнал
post_save,
который отправляется после сохранения объекта