对 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,因为它们非常准确地清楚地展示了您应该如何处理您的问题。
我正在为博客平台构建 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,因为它们非常准确地清楚地展示了您应该如何处理您的问题。