【问题标题】:What does "auth.User" in Django do?Django 中的“auth.User”是做什么的?
【发布时间】:2018-12-11 00:00:10
【问题描述】:

我正在尝试学习 Django,我在书中发现了以下代码。

from django.db import models

class Post(models.Model):
    title = models.CharField(max_length=????????????) 
    author = models.ForeignKey(
        'auth.User',
        on_delete=models.CASCADE,
      )

    body = models.TextField() 

    def __str__(self):
         return self.title

尽管我了解其中的大部分内容,但我并不真正了解 "auth.User" 在代码中的作用。此外,我尝试在文档中搜索它,但没有成功(我觉得很奇怪)。

非常感谢您的帮助。

【问题讨论】:

    标签: python django authentication


    【解决方案1】:

    'auth.user' 是身份验证应用程序的模型,它是 Django https://docs.djangoproject.com/en/2.1/ref/contrib/auth/ 的一部分。在您的代码中,您使用字符串“auth.User”作为 ForeignKey。我稍微修改了代码以从 auth 应用程序中显式导入 User 模型。

    from django.db import models
    from django.contrib.auth.models import User
    
    class Post(models.Model):
        title = models.CharField(max_length=???) 
        author = models.ForeignKey(
            User,
            on_delete=models.CASCADE,
        )
    
        body = models.TextField() 
    
        def __str__(self):
            return self.title
    

    ForeignKey 接受带有模型类名或模型类本身的字符串。 https://docs.djangoproject.com/en/2.1/ref/models/fields/#django.db.models.ForeignKey.

    通常,字符串模型名称用于以下情况:

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

    2. 在抽象模型上以这种方式定义的关系在以下情况下得到解决 该模型被归类为具体模型,并且与 抽象模型的 app_label

    3. 要引用另一个应用程序中定义的模型,您可以显式 指定具有完整应用程序标签的模型

    【讨论】:

    • 非常感谢您的回复,奇怪的是没有导入模块它工作得很好。这怎么可能?
    • 使用字符串变体在 Django 中建立了一种“延迟加载”机制,在某些情况下可以省去一些麻烦。出于这个原因,我总是使用字符串变体(据我所知,没有真正的理由不这样做)。
    • 更新了答案
    【解决方案2】:

    'auth.User' 说明符指示 ForeignKey 映射到的模型。因此,对于给定的模型,每个 Post 记录将有一个名为 author_id 的列(_id 后缀由 Django 在幕后自动添加),并将指向 User 表中的条目auth 应用程序(这是一个内置应用程序)。

    请参阅documentation on ForeignKey 了解更多信息。

    【讨论】:

    • 非常感谢您的回答。我之前看过你发布的链接,但没有找到任何关于 auth 的信息。用户知道我在哪里可以找到它,甚至可能找到 ForeignKey 可以映射到的其他模型。
    猜你喜欢
    • 2017-06-06
    • 1970-01-01
    • 2017-08-28
    • 2011-07-24
    • 2016-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-16
    相关资源
    最近更新 更多