【问题标题】:Confused regarding ForeignKey relationship in Django对 Django 中的 ForeignKey 关系感到困惑
【发布时间】:2015-05-09 02:25:08
【问题描述】:

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

在我的博客中,我的两个模型类是“作者”和“文章”。特定文章由单个/唯一作者撰写。但是,一位“作者”写了几篇文章。

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

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

如何创建作者模型?

class Author(models.Model):
     published_articles = ?

【问题讨论】:

  • Django 已经提供了这个功能:author.article_set.all().

标签: python django database database-design


【解决方案1】:

为什么不向 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,因为它们清楚地展示了你应该如何处理你的问题。

【讨论】:

    【解决方案2】:

    解决方案(如果您真的想保存该关系):

    here所述:

    如果您需要在尚未定义的模型上创建关系,您可以使用模型的名称,而不是模型对象本身。

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

    解决方案(如果您只想访问authorized_articles of author):

    正如here所说:

    Django 还为关系的“另一端”创建 API 访问器——从相关模型到定义关系的模型的链接。例如,Blog 对象 b 可以通过 entry_set 属性访问所有相关 Entry 对象的列表: b.entry_set.all().

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

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

    【讨论】:

    • Article 类中的 ForeignKey (Author) 字段将保持原样吗?
    • 非常感谢!但如果可能的话,你能解释一下解决方案吗?
    • 这不是一个好的做法,因为它不是多对多的关系。
    • @HarshGupta 我已经更新了答案。根据您的用例选择。
    • @FelixD。这取决于用例,一篇文章可能由许多作者撰写。在这种情况下,不需要外键关系。最好的!
    猜你喜欢
    • 2018-03-05
    • 2020-12-20
    • 2018-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-08
    • 2015-11-29
    • 2019-11-19
    相关资源
    最近更新 更多