РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
75 of 818 menu

Метод update_or_create

Метод update_or_create применяется к менеджеру модели и позволяет обновить существующий объект, если он найден, или создать новый объект, если объект не найден. Метод принимает два обязательных словаря: defaults для значений полей при обновлении или создании и критерии поиска в виде ключевых аргументов. Метод возвращает кортеж из двух элементов: объект и булево значение, указывающее, был ли объект создан. Этот метод выполняется в рамках одной транзакции базы данных, что гарантирует атомарность операции.

Синтаксис

Model.objects.update_or_create(defaults=None, **kwargs)

Пример . Модель

Рассмотрим модель Article, которая будет использоваться в примерах:

from django.db import models class Article(models.Model): title = models.CharField(max_length=200) slug = models.SlugField(unique=True) content = models.TextField() views = models.IntegerField(default=0) is_published = models.BooleanField(default=False) created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True) def __str__(self): return self.title

Пример

Давайте создадим новую статью или обновим существующую, если статья с таким slug уже есть:

from myapp.models import Article article, created = Article.objects.update_or_create( slug="django-tutorial", defaults={ "title": "Django Tutorial for Beginners", "content": "This is a comprehensive guide to Django.", "is_published": True } ) print(f"Created: {created}") print(f"Article title: {article.title}")

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

"Created: True" "Article title: Django Tutorial for Beginners"

Если объекта с slug="django-tutorial" не существует, он будет создан с указанными значениями из defaults.

Пример

Давайте обновим существующую статью, увеличив количество просмотров, или создадим новую, если её нет:

from myapp.models import Article article, created = Article.objects.update_or_create( slug="python-basics", defaults={ "title": "Python Basics", "views": models.F("views") + 1 } ) print(f"Created: {created}") print(f"Views: {article.views}")

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

"Created: False" "Views: 42"

В этом примере существующая статья с slug="python-basics" была обновлена, количество просмотров увеличилось на 1. Если бы статьи не было, она была бы создана с views=1.

Пример

Рассмотрим пример с использованием нескольких критериев поиска и сложных значений в defaults:

from myapp.models import Article from datetime import datetime article, created = Article.objects.update_or_create( slug="web-dev-guide", is_published=True, defaults={ "title": "Web Development Guide 2025", "content": "Updated content for 2025.", "views": 100, "updated_at": datetime.now() } ) print(f"Created: {created}") print(f"Title: {article.title}") print(f"Updated at: {article.updated_at}")

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

"Created: True" "Title: Web Development Guide 2025" "Updated at: 2026-09-05 14:30:25.123456"

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

  • метод get_or_create,
    который получает существующий объект или создаёт новый
  • метод update,
    который обновляет все объекты в QuerySet
  • метод create,
    который создаёт новый объект в базе данных
  • метод save,
    который сохраняет объект в базе данных
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить