我有两个非常简单的模型:
class Author(models.Model):
name = models.CharField(max_length=255)
def hasBooks(self):
return self.books.count()
class Book(models.Model):
title = models.ForeignKey(Author, related_name="books")
我想编写一个函数 hasBooks(如上所示),如果作者有相关书籍,则该函数仅返回 true 或 false。我能想到的唯一方法是获取 count() ,如果大于 0,则返回 true,如果为 0,则返回 false。这样做的问题是,书目表非常庞大,有些作者有数千本书,因此获取准确数量的处理是一种浪费。我只想知道是否有一个。
有没有办法使用更少的处理来做到这一点?
最佳答案
您可以尝试获取第一个元素:
def hasBooks(self):
return len(self.books.all()[:1]) == 1
当然,这会检索所有元素,但仅检索 Actor 的第一本书(切片意味着 SQL 查询中的 LIMIT 1)。
您还可以使用有用的exists()函数:
def hasBooks(self):
return self.books.exists()
关于Django - 检查模型是否有子级(相关模型),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18391597/