我有两个模型,Author
和Book
。我需要让所有Author
都没有Books
的人使用Django的ORM。我该怎么办?
这是我的模特:
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)
答案 0 :(得分:0)
.annotate(books_count=Count('id'))
Django将在此处计算 Author
的 id
。试试
.annotate(books_count=Count('books__id'))
相反。双下划线表示query that spans relationships:
Django提供了一种强大而直观的方式来“跟踪”查找中的关系,并在幕后自动为您处理SQL
JOIN
。要建立关系,只需在各个模型之间使用相关字段的字段名称,并用双下划线将其隔开,直到找到所需的字段为止。此示例使用
Entry
为Blog
的{{1}}检索所有name
个对象:'Beatles Blog'