使用 Django ORM 查找不是任何外键目标的对象



我有两个模型,AuthorBook。我需要让所有对 Django 的 ORM 没有BooksAuthor。我该怎么做?

这是我的模型:

class Author(models.Model):
name = models.CharField(max_length=30)
age = models.IntegerField()

class Book(models.Model):
name = models.CharField(max_length=500)
author = models.ForeignKey(Author, related_name='books')

我目前正在使用for循环执行此操作,但我更愿意使用 ORM 执行此操作:

for person in Author.objects.all():
if person.books.count() == 0:
"something code"

但它需要对对象进行更新。

我试过这个,但我只是得到一个空QuerySet

Author.objects.select_related('books').values('id').annotate(books_count=Count('id')).filter(books_count=0)
.annotate(books_count=Count('id'))

Django将在这里计算Authorid。尝试

.annotate(books_count=Count('books__id'))

相反。双下划线表示跨关系的查询:

Django 提供了一种强大而直观的方法来"跟踪"查找中的关系,在幕后自动为您处理 SQLJOIN。若要跨越关系,只需跨模型使用相关字段的字段名称(用双下划线分隔(,直到到达所需的字段。

此示例检索具有name'Beatles Blog'Blog的所有Entry对象:

>>> Entry.objects.filter(blog__name='Beatles Blog')

相关内容

最新更新