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
不过,您最初的方法对我来说更具可读性。别开玩笑了!您最初的解决方案只对数据库进行一次查询,但这一次需要一个循环。在这种情况下,反向关系不是实现目标的最有效方法。