Как отфильтровать записи, которые не имеют записей в связанной таблице?
Рассмотрим две следующие модели:
from django.db import models
class Author(models.Model):
name = models.CharField(max_length=255)
class Book(models.Model):
author = models.ForeignKey(Author, models.CASCADE, related_name="books")
как получить только авторов, у которых нет книг?
Вы можете сделать что-то вроде этого: получить всех авторов книг, а затем получить всех авторов, которых вы не получили в первом запросе (то есть у них нет книг).
Непроверенный код:
# fetch all the author ids that have books
authors_with_books = Book.objects.distinct('author').values_list('author_id', flat=True)
# fetch all the authors that have no books
authors_with_no_books = Author.objects.exclude(id__in=authors_with_books)
Для выполнения этого фильтра можно использовать isnull или просто передать None
в related_name
Author.objects.filter(books__isnull=True)
Author.objects.filter(books=None)