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

Метод clear

Метод clear применяется к менеджеру связанных объектов (related manager) и удаляет все объекты из набора связанных записей. Для отношений ManyToManyField метод удаляет все связи между текущим объектом и связанными объектами, не удаляя сами объекты. Для отношения ForeignKey с параметром null=True метод устанавливает значение внешнего ключа в None для всех связанных объектов. Метод не принимает аргументов и сразу выполняет операцию в базе данных.

Синтаксис

instance.related_manager.clear()

Пример . Для ManyToManyField

Рассмотрим модель Article со связью ManyToManyField к модели Category. Удалим все категории у конкретной статьи:

from myapp.models import Article, Category # Получаем статью article = Article.objects.get(pk=1) # Добавляем несколько категорий category1 = Category.objects.create(name='Python') category2 = Category.objects.create(name='Django') article.categories.add(category1, category2) print(article.categories.count()) # "2" # Очищаем все связи с категориями article.categories.clear() print(article.categories.count()) # "0"

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

"2" "0"

Пример . Для ForeignKey с null=True

Рассмотрим модель Comment с внешним ключом к модели Article, где параметр null=True разрешает отсутствие связи. Удалим связь у всех комментариев конкретной статьи:

from myapp.models import Article, Comment # Получаем статью с комментариями article = Article.objects.get(pk=1) # Создаём комментарии comment1 = Comment.objects.create( text='Great article!', article=article ) comment2 = Comment.objects.create( text='Nice!', article=article ) print(article.comment_set.count()) # "2" # Удаляем связь у всех комментариев article.comment_set.clear() print(article.comment_set.count()) # "0"

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

"2" "0"

Пример . С использованием prefetch_related

Метод clear можно использовать вместе с prefetch_related для оптимизации работы с большим количеством связанных объектов:

from myapp.models import Article # Получаем статью с предзагрузкой категорий article = Article.objects.prefetch_related('categories').get(pk=1) # Очищаем все категории article.categories.clear() # Проверяем результат print(article.categories.count()) # "0"

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

"0"

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

  • метод add,
    который добавляет связи в отношения ManyToManyField
  • метод remove,
    который удаляет конкретные связи из отношений
  • метод set,
    который заменяет набор связанных объектов
  • метод delete,
    который удаляет сами объекты из базы данных
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить