Python 以另一种方式编写django查询

Python 以另一种方式编写django查询,python,django,python-2.7,django-models,django-queryset,Python,Django,Python 2.7,Django Models,Django Queryset,我有一个简单的论坛应用程序: class Board(models.Model): title = models.CharField(max_length=100) class Topic(models.Model): board = models.ForeignKey(Board) title = models.CharField(max_length=100) class Post(models.Model): topic = models.Forei

我有一个简单的论坛应用程序:

class Board(models.Model):
    title = models.CharField(max_length=100)


class Topic(models.Model):
    board = models.ForeignKey(Board)
    title = models.CharField(max_length=100)


class Post(models.Model):
    topic = models.ForeignKey(Topic)
    body = models.TextField()
我想清点
板上的所有帖子。一种方法是打电话:

class Board(...):
    ...
    def post_count(self):
        return Post.objects.filter(topic__board=self).count()

但是有没有一种方法不是从Post.objects而是从Board模型开始?像
Board.objects…
?因此,我不需要在board类中使用任何进一步的方法,而是使用一些内置的方法?

您可以使用每个对象中的相关管理器,这些对象都有一个外键指向它们,以从这些外键关系的另一端进行查询。默认情况下,这些所谓的反向相关管理器被命名为{model with foreign key}\u set,并且存在于另一个模型的外键关系指向的模型的任何对象上

下面是一个使用建议问题反向处理关系的示例:

class Board(models.Model):
    ...
    def post_count(self):
        count = 0
        for topic in self.topic_set:
            count += topic.post_set.count()
        return count

不过,您最初的方法对我来说更具可读性。

别开玩笑了!您最初的解决方案只对数据库进行一次查询,但这一次需要一个循环。在这种情况下,反向关系不是实现目标的最有效方法。