繁体   English   中英

Django 设置文件中 AUTH_USER_MODEL 的值

[英]Value for AUTH_USER_MODEL in Django settings file

在 Django 中,每当我们想在文件中使用名为model_name ,我们必须将该模型导入为

from app_name.models import model_name

当我们必须在项目中使用自定义用户模型作为用户模型时,我们必须在settings.py文件中指定对该模型的引用作为

AUTH_USER_MODEL = app_name.model_name

所以我的问题是为什么我们必须在settings.py文件中将AUTH_USER_MODEL的值指定为

app_name.model_name

而不是作为

app_name.models.model_name

为什么我们没有在settings.py文件中为AUTH_USER_MODEL使用提及models.py文件的值

在启动时 django 为每个应用程序导入models模块并注册所有Model子类。

django/apps/registry.py

        # Mapping of app labels => model names => model classes. Every time a
        # model is imported, ModelBase.__new__ calls apps.register_model which
        # creates an entry in all_models. All imported models are registered,
        # regardless of whether they're defined in an installed application
        # and whether the registry has been populated. Since it isn't possible
        # to reimport a module safely (it could reexecute initialization code)
        # all_models is never overridden or reset.
        self.all_models = defaultdict(dict)

模型是不是有Python模块,而是以引用app_labelmodel_name (小写)。 查找一个模型,则是由app_labelmodel_name

用户模型除了:

django/contrib/auth/__init__.py

def get_user_model():
    """
    Return the User model that is active in this project.
    """
    try:
        return django_apps.get_model(settings.AUTH_USER_MODEL, require_ready=False)
    ...

在很多情况下, app_label也是该应用程序的模块名称,这可能会造成混淆。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM