Метод get_or_create
Метод get_or_create применяется к менеджеру модели и возвращает кортеж, содержащий объект и булево значение, указывающее, был ли объект создан. В качестве аргументов метод принимает параметры для поиска объекта, а также дополнительные значения для создания в случае отсутствия объекта. Метод выполняет запрос к базе данных, и если объект не найден, создает новый с переданными параметрами.
Синтаксис
Model.objects.get_or_create(**kwargs)
Где kwargs - это набор параметров для поиска объекта. Метод возвращает кортеж (object, created), где object - полученный или созданный объект, а created - булево значение (True, если объект был создан, False - если получен из базы).
Пример
Давайте получим категорию с названием "Django", а если её нет - создадим:
from myapp.models import Category
category, created = Category.objects.get_or_create(name="Django")
print(f"Category: {category.name}, Created: {created}")
Результат выполнения кода:
"Category: Django, Created: True"
Пример
Давайте получим пользователя по имени и email, а если его нет - создадим с указанием возраста:
from myapp.models import User
user, created = User.objects.get_or_create(
username="john_doe",
defaults={"email": "john@example.com", "age": 30}
)
print(f"User: {user.username}, Created: {created}")
Результат выполнения кода:
"User: john_doe, Created: False"
Пример
Давайте создадим статью с заголовком "My first post", если такой ещё нет, и укажем статус:
from myapp.models import Article
article, created = Article.objects.get_or_create(
title="My first post",
defaults={"status": "draft", "views": 0}
)
print(f"Article: {article.title}, Views: {article.views}")
Результат выполнения кода:
"Article: My first post, Views: 0"
Пример
Давайте создадим комментарий к статье, если его ещё нет:
from myapp.models import Comment, Article
article = Article.objects.get(id=1)
comment, created = Comment.objects.get_or_create(
article=article,
author="anonymous",
defaults={"text": "Great article!", "rating": 5}
)
print(f"Comment ID: {comment.id}, Created: {created}")
Результат выполнения кода:
"Comment ID: 42, Created: True"
Смотрите также
-
метод
update_or_create,
который обновляет объект или создает его при отсутствии -
метод
create,
который создает объект без предварительной проверки -
метод
get,
который получает одну запись из базы данных -
метод
filter,
который фильтруетQuerySetпо заданным условиям