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

Метод add

Метод add применяется к менеджеру отношений ManyToManyField и добавляет указанные объекты в связь многие-ко-многим. Метод принимает один или несколько аргументов - объекты модели или их первичные ключи. При вызове метода новые связи создаются в промежуточной таблице, а существующие дубликаты игнорируются.

Синтаксис

instance.related_field.add(obj1, obj2, ...)

Пример

Допустим, у нас есть модели Article и Category со связью ManyToMany. Давайте добавим категории к конкретной статье:

from myapp.models import Article, Category # Get article and categories article = Article.objects.get(pk=1) category1 = Category.objects.get(name="Technology") category2 = Category.objects.get(name="Science") # Add categories to article article.categories.add(category1, category2)

После выполнения этого кода статья будет связана с категориями "Technology" и "Science". Если попытаться добавить уже существующую связь, она не будет создана повторно.

Пример

Метод add также принимает первичные ключи объектов вместо самих объектов. Это может быть полезно для оптимизации производительности, чтобы избежать лишних запросов к базе данных:

from myapp.models import Article # Get article article = Article.objects.get(pk=1) # Add categories by their primary keys article.categories.add(3, 5, 7)

В этом примере к статье добавляются категории с ID 3, 5 и 7. Метод автоматически определяет, что переданы первичные ключи, и выполняет вставку соответствующих связей.

Пример

Метод add можно использовать для добавления всех объектов из QuerySet, используя оператор распаковки *:

from myapp.models import Article, Category # Get article and all categories article = Article.objects.get(pk=1) all_categories = Category.objects.filter(status="active") # Add all categories to article article.categories.add(*all_categories)

В результате все активные категории будут добавлены к статье. Это удобно, когда нужно добавить множество объектов одним вызовом.

Пример

Метод add можно использовать для добавления связей через промежуточную модель с дополнительными полями. Для этого нужно создать экземпляр промежуточной модели и сохранить его:

from myapp.models import Article, Category, ArticleCategory # Get article and category article = Article.objects.get(pk=1) category = Category.objects.get(name="Technology") # Create through model instance with extra field article_category = ArticleCategory( article=article, category=category, added_by="admin" ) article_category.save()

После сохранения связи в промежуточной таблице появится запись с полем 'added_by'.

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

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