对 Django 中的外键关系感到困惑

Confused regarding ForeignKey relationship in Django

我正在为博客平台构建 Django 应用程序。在编写模型时,我陷入了数据库关系之间的困惑。

在我的博客中,我的两个模型 class 是 'Author' 和 'Article'。某篇文章是由 single/unique 作者撰写的。但是,一个'Author'写好几篇文章。

class Article(models.Model):
      author_name = models.ForeignKey(Author)

现在我还想将特定作者撰写的所有文章存储在 'Author' class 中,以便我可以在我的视图中的 'Author' 页面中显示它们。

如何创建作者模型?

class Author(models.Model):
     published_articles = ?

解决方案(如果你真的想保存那个关系):

如前所述here

If you need to create a relationship on a model that has not yet been defined, you can use the name of the model, rather than the model object itself.

class Author(models.Model):
     published_articles = models.ManyToManyField('your_actual_app_label.Article')

解决方案(如果你只想要一种访问作者 published_articles 的方法):

并且如前所述here

Django also creates API accessors for the “other” side of the relationship – the link from the related model to the model that defines the relationship. For example, a Blog object b has access to a list of all related Entry objects via the entry_set attribute: b.entry_set.all().

author = Author.objects.first()
author.article_set.all()

明智地选择。 希望这有帮助:)

为什么不直接向 Author 模型添加一个方法,以便从视图中轻松检索他的所有文章?

class Article(models.Model):
    author_name = models.ForeignKey(Author)

class Author(models.Model):
    # ...
    def get_articles(self):
         "Returns the author published articles"
         return self.article_set.all()

那么,在你看来

def my_view(request):

    # Retrieve the author the way you see fit
    author = Author.objects.get(id=request.session['author'])

    articles = author.get_articles()
    context = {"articles": articles}
    return render(request, 'mytemplate.html', context)

我建议您看一下 docs,因为它们非常准确地清楚地展示了您应该如何处理您的问题。