Django settings.AUTH_USER_MODEL在单独的模块

时间:2018-05-04 16:16:50

标签: django python-3.x

说出我的 AUTH_USER_MODEL 是什么的正确方法是什么?

我有以下一套:

文件夹结构:

---后端
----- api
--------型号
----------- user.py

user.py 位于模型文件夹

中 settings.py中的

AUTH_USER_MODEL = 'myapp.User'

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'api',
]

型号:

class User:

    class Meta:
        app_label = "myapp"

当我运行任何manage.py命令时,例如

  

python manage.py showmigrations

我收到此错误:

  

LookupError:没有安装带有“myapp”标签的应用。

问题解决方案是将 api 文件夹重命名为 myapp ,由于对型号名称的某些限制,我无法这样做。

或者将AUTH_USER_MODEL设置为 api.User ,但这会导致更改所有数据表名称,并且这些名称必须保持不变

以“ myapp _ ”开头的数据表名称不应更改

2 个答案:

答案 0 :(得分:1)

鉴于您的文件夹结构如下:

backend
└── api
|   ├── __init__.py
|   ├── apps.py
|   └── models
|       ├── __init__.py
|       └── user.py
├── manage.py
└── settings.py

然后您可以在backend/api/create an app config创建一个名为apps.py的文件。在那里你可以重命名你的应用程序:

<强>后端/ API / apps.py

from django.apps import AppConfig


class MyAppConfig(AppConfig):
    name = 'myapp'
    verbose_name = _('My App')

此外,您需要将其添加到该文件夹​​中的__init__.py

<强>后端/ API / __初始化__吡啶

default_app_config = 'api.apps.MyAppConfig'

此外,如果您想使用myapp.User作为用户模型,还必须导入models模块:

<强>后端/ API /模型/ __初始化__吡啶

from .user import User
# or use "from .user import *" to import everything but then make sure you have __all__ defined in user.py

答案 1 :(得分:1)

解决方案是更改类MyAppConfig(AppConfig)中的AppConfig.label,因此,如果您更新答案,我会接受。更改名称以什么结尾都没有,它必须是代码所在模块的真实名称,但是实际上添加label ='arbitrary_name'