Django一对多

Django one-to many

我真的很困惑 Django 如何处理数据库关系。

最初我有一个包含 article_views 的简单 IntegerField 的文章模型,最近我试图扩展 article_view 的定义以包含它自己的字段,所以我创建了一个模型它。 (IP、会话密钥等。)

我对如何建立这种关系有点不知所措,对我来说,在文章模型中有一个一对多的字段是最有意义的,因为一篇文章可以有很多不同的观点, 但一个视图只能是一篇文章的一部分。

我看到的所有实现都以一种非常奇怪的反向方式设置了这个,这是怎么回事?

不幸的是,Django 没有一对多字段。这是通过在本例中的 ArticleView 模型上创建 ForeignKey 来实现的。当您想轻松访问模板中的文章视图时,您可以在 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'))