【问题标题】:why is related_name plural for ForeignKey?为什么 ForeignKey 的 related_name 是复数?
【发布时间】:2023-01-11 03:47:32
【问题描述】:

目前我正在读书

Django 4 示例 - 第四版

我们正在 blog 应用程序中创建一个 Post 模型。 根据 sqlmigrate 命令,该表被命名为 blog_post

但是当我们添加 ForeignKeyfrom PostUser 模型时

author = models.ForeignKey(User, on_delete=models.CASCADE,
                           related_name='blog_posts')

related_nameblog_posts 而不是 blog_post

为什么它是复数而不是实际的表名?

【问题讨论】:

    标签: django-models


    【解决方案1】:

    related_name=… parameter [Django-doc] 用于反向查询项目。在这种情况下,这意味着对于给定的 User(作者),您可以检索作者使用的所有 Posts:

    my_user.blog_posts<b>.all()</b>

    既然可以,, 或者更多的比如Posts,这是一个集合,所以通常写成复数形式。 my_user.<s>blog_post</s>.all()会暗示这是单品,其实不然。

    如果不指定名称,related_name=… 的默认值为 <i>modelname</i>_set,其中modelname小写的模型名称,所以post_set,再次暗示这是一个收藏Post 个对象。

    对于 OneToOneField [Django-doc]related_name=… 通常是单数, 从此只有最多一个这样的Post。因此,OneToOneFieldrelated_name=… 的默认值是modelname,所以这里是post


    笔记: 通常使用settings.AUTH_USER_MODEL [Django-doc] 来引用用户模型比直接使用User model [Django-doc] 更好。更多信息可以查看referencing the User model section of the documentation

    【讨论】:

      猜你喜欢
      • 2011-02-08
      • 2020-05-23
      • 2017-10-24
      • 1970-01-01
      • 2011-08-12
      • 1970-01-01
      • 2016-10-08
      • 2011-05-11
      • 1970-01-01
      相关资源
      最近更新 更多