我真的很困惑django是如何处理数据库关系的
原来我有一个文章模型,包含一个简单的IntegerField的article_views,最近我试图扩展一个article_view的定义,以包含它自己的字段,所以我创建了一个模型。(IP, SESSION KEY等)
关于如何建立关系,我有点不知所措,对我来说,在文章模型中有一个一对多字段是最有意义的,因为一篇文章可以有许多不同的视图,但一个视图只能是一篇文章的一部分。
我看到的所有实现都以一种非常奇怪的反向方式设置了这个,这是怎么回事?
遗憾的是,Django没有一对多字段。这是通过创建ForeignKey
(在本例中是ArticleView
模型)来实现的。当您想在模板中轻松访问文章视图时,您可以在ForeignKey
上设置related_name
。
class Article(models.Model):
# Article definition
class ArticleView(models.Model):
article = models.ForeignKey(Article, related_name='views')
在模板中,您现在可以使用article.views.count()
来获取与帐户耦合的视图数。
请注意,这会为您想要的每个计数创建一个数据库查询。最好有一个带有注释的查询集:Article.objects.annotate(num_views=Count('views'))