Django获取所有关系

时间:2012-06-06 06:38:07

标签: django foreign-keys

我有一个与此代码段具有相似结构的应用

class Blog(models.Model):
    name = models.CharField(max_length=25)

class Category(models.Model):
    name = models.CharField(max_length=25)
    blog = models.ForeignKey(Blog)

class Entry(models.Model):
    title = models.CharField(max_length=25)
    category = models.ForeignKey(Category)

最通用的方式是什么,我可以在其他应用中使用它来获取所有类别和条目的博客?

我考虑过为Blog模型创建一个管理器,可以获取该博客的所有类别,但它是硬编码模型名称

 class BlogManager(models.Manager):
     def categories(self):
         return Category.objects.filter(blog=self)

有什么建议吗?

2 个答案:

答案 0 :(得分:2)

你想要的是Select Related。它返回一个QuerySet,它将自动“跟随”外键关系,在执行查询时选择其他相关对象数据。您对博客的查询类似于:

Blog.objects.select_related().filter( something )

Blog.objects.select_related().get( something )

答案 1 :(得分:0)

为什么不使用标准方式? 使用博客PK与FK关系进行过滤。

Category.objects.filter(blog__pk=self.pk)