Django:在1到N模型中,是否有一种查找相关对象的简单方法?

时间:2010-07-27 08:45:59

标签: django django-models

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

 def get_posts_belonging_to_this_blog_instance(self):
  return Post.objects.filter(blog__exact=self.id)

class Category(models.Model):
 name = models.CharField()

 def get_posts_with_this_category(self):
  return Post.objects.filter(category__exact=self.id)

class Post(models.Model):
 blog = models.ForeignKey(Blog)
 category = models.ForeignKey(Category)
 text = models.TextField()

使用代码解释它的最佳方法是,有更多的Django方法吗?

1 个答案:

答案 0 :(得分:4)

首先,请注意这些关系不是1比1,它们是1到N或N比1,这取决于你看的方式。

  • 博客可以有很多帖子 - 1到N。
  • 类别可以有很多帖子 - 1到N。
  • 一个帖子属于一个类别,但一个类别可以有很多帖子 - N到1.如果一个类别只能有1个帖子,那么它将是1比1 - 它是一个独家关系,就像一对一夫妻: - )

要访问类别或博客中的所有帖子,您只需使用your_category.post_set.all()即可。如果要更改此属性名称,可以像这样定义Post:

blog = models.ForeignKey(Blog, related_name="posts")
category = models.ForeignKey(Category, related_name="posts")

然后使用your_category.posts.all()your_blog.posts.all()进行访问。