我有两个模型,Author
和Book
。我需要让所有对 Django 的 ORM 没有Books
Author
。我该怎么做?
这是我的模型:
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将在这里计算Author
的id
。尝试
.annotate(books_count=Count('books__id'))
相反。双下划线表示跨关系的查询:
Django 提供了一种强大而直观的方法来"跟踪"查找中的关系,在幕后自动为您处理 SQL
JOIN
。若要跨越关系,只需跨模型使用相关字段的字段名称(用双下划线分隔(,直到到达所需的字段。此示例检索具有
name
为'Beatles Blog'
的Blog
的所有Entry
对象:>>> Entry.objects.filter(blog__name='Beatles Blog')