postgresql 如何筛选在相关表中没有记录的记录?

iyfjxgzm  于 2022-12-18  发布在  PostgreSQL
关注(0)|答案(2)|浏览(218)

考虑以下两种模型:

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

如何只得到没有书的作者?

lawou6xi

lawou6xi1#

您可以使用isnull或仅将None传递给related_name来执行此过滤器

Author.objects.filter(books__isnull=True)
Author.objects.filter(books=None)
mf98qq94

mf98qq942#

你可以这样做:获取书籍的所有作者,然后获取在第一个查询中没有检索到的所有作者(意味着他们没有书籍)。
未测试代码:

# 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)

相关问题