Django - 检查模型是否有子级(相关模型)

标签 django python-2.7 django-models

我有两个非常简单的模型:

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/

相关文章:

python - 升级到 Django 1.7。 AssertionError : To use StatusField, 模型 'ShellRequest' 必须具有 STATUS 选择类属性

python - Django REST Framework - 通过路由器将模型传递给 ViewSet

Django 模型 ForeignKey on_delete 属性 : full meaning?

Django:或查询动态字段名称

python - 是否有类似 Python 子进程的调用接受标准输入字符串并返回标准错误、标准输出和返回代码?

python - 检查是否安装了python 3的问题

django - 限制外键数量

python - Django 时间戳

Python xhtml2pdf 横向生成PDF

python - 当数据框和元组值匹配时,有条件地从元组值填充数据框行