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

Метод intersection

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

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

Синтаксис

queryset.intersection(other_queryset1, other_queryset2, ...)

Пример

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

from myapp.models import Article from datetime import date # Articles created in January 2025 january_articles = Article.objects.filter( created_at__month=1, created_at__year=2025 ) # Articles with "Python" in the title python_articles = Article.objects.filter( title__icontains="Python" ) # Intersection of both QuerySets result = january_articles.intersection(python_articles) for article in result: print(article.title)

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

"Python Basics for Beginners" "Advanced Python Patterns"

Пример

Используем метод intersection с несколькими QuerySet для поиска статей, которые удовлетворяют всем условиям:

from myapp.models import Article from datetime import date, timedelta # Articles published in 2025 year_2025 = Article.objects.filter( published_at__year=2025 ) # Articles with more than 1000 views popular_articles = Article.objects.filter( views__gt=1000 ) # Articles with status 'published' published = Article.objects.filter( status='published' ) # Find articles that meet all three conditions result = year_2025.intersection(popular_articles, published) # Display the results for article in result: print(f"Title: {article.title}, Views: {article.views}")

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

"Title: Django Optimization Guide, Views: 2500" "Title: Python Design Patterns, Views: 1800"

Пример

Покажем, как метод intersection работает с цепочками методов и дальнейшей фильтрацией:

from myapp.models import Article from datetime import datetime # Articles from the last 30 days recent = Article.objects.filter( created_at__gte=datetime.now() - timedelta(days=30) ) # Articles with comments with_comments = Article.objects.annotate( comment_count=models.Count('comments') ).filter(comment_count__gt=0) # Articles from specific category category_articles = Article.objects.filter( category__name='Web Development' ) # Find articles that are recent, have comments, # belong to Web Development category, and are published result = (recent.intersection(with_comments, category_articles) .filter(status='published') .order_by('-views')[:5]) # Display the results for article in result: print(f"{article.title}: {article.views} views")

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

"React Performance Tips: 3200 views" "Building Scalable APIs: 2100 views" "Webpack Configuration Guide: 1500 views" "CSS Grid Layout: 1200 views" "JavaScript Async Patterns: 800 views"

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

  • метод union,
    который объединяет QuerySet в один набор
  • метод difference,
    который возвращает элементы, присутствующие в первом QuerySet, но отсутствующие в других
  • метод filter,
    который фильтрует QuerySet по заданным условиям
  • метод exclude,
    который исключает записи из QuerySet
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить