计算相关对象数量的惯用法

时间:2016-01-28 12:22:06

标签: django

这就是我目前的做法:

class Article(models.Model):

    ...

    def nr_notes(self):
        return len(Note.objects.filter(article=self.pk))


class Note(models.Model):
    article = models.ForeignKey(Article, on_delete=models.CASCADE)

但我想"必须有更好的方式"。可能会访问the generated notes_set字段?

实施方法nr_notes的正确方法是什么?

1 个答案:

答案 0 :(得分:3)

是的,使用count,这会对数据库进行计数查询,而不是评估过滤器

 Note.objects.filter(article=self.pk).count()

来自evaluating querysets

  

当您在其上调用len()时,将评估QuerySet。正如您所料,这会返回结果列表的长度。

     

注意:如果您只需要确定集合中的记录数(并且不需要实际对象),则使用SQL的SELECT COUNT(*)处理数据库级别的计数会更有效。 Django正是出于这个原因提供了count()方法。