0

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

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)

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

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

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

有什么建议么?

4

2 回答 2

3

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

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

或者

Blog.objects.select_related().get( something )
于 2012-06-06T06:48:32.170 回答
0

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

Category.objects.filter(blog__pk=self.pk)
于 2012-06-06T13:41:25.183 回答