AUTH_USER_MODEL不接受子应用程序

时间:2014-10-27 08:33:04

标签: python django django-users

使用Django 1.7.1Python 3.4时,我的自定义用户模型出现问题。 我在apps.users.AuthUser中声明了一个自定义用户模型。然后我有另一个应用程序(apps.pets),它将使用AuthUser作为Pet模型中的ForeignKey。见下文:

class Pet(models.Model):
    owner = models.ForeignKey(settings.AUTH_USER_MODEL, db_index=True, blank=False, null=False)

这是我的情景:

在我的INSTALLED_APPS我有:“apps.users”

如果我设置AUTH_USER_MODEL="apps.users.AuthUser",则在运行'runserver'时会引发异常:

File "/home/frank/.virtualenvs/myproj/lib/python3.4/site-packages/django/contrib/auth/checks.py", line 12, in check_user_model
    cls = apps.get_model(settings.AUTH_USER_MODEL)
  File "/home/frank/.virtualenvs/myproj/lib/python3.4/site-packages/django/apps/registry.py", line 201, in get_model
    app_label, model_name = app_label.split('.')
ValueError: too many values to unpack (expected 2)

如果我设置AUTH_USER_MODEL =“users.AuthUser”,则在运行migrate时会引发异常:

File "/home/frank/.virtualenvs/myproj/lib/python3.4/site-packages/django/db/migrations/state.py", line 89, in render
    model=lookup_model,
ValueError: Lookup failed for model referenced by field pets.Pet.owner: users.AuthUser

我猜这里报道了类似的问题:https://code.djangoproject.com/ticket/19845

这是否意味着在AUTH_USR_MODEL设置中我必须使用'app_label.model_name'而不是'apps.app_label.model_name。'?有解决方法吗?

EDIT1: 我的项目结构如下:

SITE_ROOT
|-- PROJECT_ROOT/
|   |-- apps/
|   |   |-- app1
|   |   |-- app2
|   |-- etc/
|   |-- libs/
|   |-- media/
|   |-- requirements/
|   |   |-- __init__.py
|   |   |-- common.py
|   |   |-- development.py
|   |   |-- production.py
|   |   `-- staging.py
|   |-- settings/
|   |   |-- __init__.py
|   |   |-- common.py
|   |   |-- development.py
|   |   |-- production.py
|   |   `-- staging.py
|   |-- templates/
|   |-- README
|   |-- __init__.py
|   |-- .gitignore
|   `-- manage.py

1 个答案:

答案 0 :(得分:0)

在您安装的应用程序中,您可以将应用程序名称假设在同一目录中,不需要特别提及'myapp.users',只需要'myapp'即可。

使用此:

AUTH_USER_MODEL = 'myapp.MyAuthUserModel'

请勿使用此<:strong>

AUTH_USER_MODEL = 'myapp.models.MyAuthUserModel'

希望这有帮助!