看djangobb源代码时,看到view的show_forum(request, forum_id, full=True)时,对于topics = forum.topics.order_by('-sticky', '-updated')想不明白,forum对象没有topics属性字段啊,怎么可以这样访问呢?原来是models中的topics 有个forum字段,该字段是个外键,related_name='topics',所以从关联表可以直接通过关联名来访问。topics的posts也存在类似的问题。
class Topic(models.Model): forum = models.ForeignKey(Forum, related_name='topics', verbose_name=_('Forum')) name = models.CharField(_('Subject'), max_length=255) class Post(models.Model): topic = models.ForeignKey(Topic, related_name='posts', verbose_name=_('Topic'))
view中的应用:
topics = forum.topics.order_by('-sticky', '-updated').select_related() posts = topic.posts.all().select_related()