这就是我目前的做法:
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
的正确方法是什么?
答案 0 :(得分:3)
是的,使用count
,这会对数据库进行计数查询,而不是评估过滤器
Note.objects.filter(article=self.pk).count()
当您在其上调用len()时,将评估QuerySet。正如您所料,这会返回结果列表的长度。
注意:如果您只需要确定集合中的记录数(并且不需要实际对象),则使用SQL的SELECT COUNT(*)处理数据库级别的计数会更有效。 Django正是出于这个原因提供了count()方法。