Метод get_or_create

Метод get_or_create применяется к менеджеру модели и возвращает кортеж, содержащий объект и булево значение, указывающее, был ли объект создан. В качестве аргументов метод принимает параметры для поиска объекта, а также дополнительные значения для создания в случае отсутствия объекта. Метод выполняет запрос к базе данных, и если объект не найден, создает новый с переданными параметрами.

Синтаксис

pythonModel.objects.get_or_create(**kwargs)

Где kwargs - это набор параметров для поиска объекта. Метод возвращает кортеж (object, created), где object - полученный или созданный объект, а created - булево значение (True, если объект был создан, False - если получен из базы).

Пример

Давайте получим категорию с названием "Django", а если её нет - создадим:

pythonfrom myapp.models import Category

category, created = Category.objects.get_or_create(name="Django")
print(f"Category: {category.name}, Created: {created}")

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

python"Category: Django, Created: True"

Пример

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

pythonfrom 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}")

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

python"User: john_doe, Created: False"

Пример

Давайте создадим статью с заголовком "My first post", если такой ещё нет, и укажем статус:

pythonfrom 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}")

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

python"Article: My first post, Views: 0"

Пример

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

pythonfrom 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}")

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

python"Comment ID: 42, Created: True"

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

  • метод update_or_create,
    который обновляет объект или создает его при отсутствии
  • метод create,
    который создает объект без предварительной проверки
  • метод get,
    который получает одну запись из базы данных
  • метод filter,
    который фильтрует QuerySet по заданным условиям