我有一个与此代码段具有相似结构的应用
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)
有什么建议吗?
答案 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)