微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

无法设置设置在Django中{AUTH_USER_MODEL

如何解决无法设置设置在Django中{AUTH_USER_MODEL

以前,我无法为我的项目设置AUTH_USER_MODEL = 'apps.authuser.User'。我所有的应用程序都合并到一个文件夹中,并以apps命名。项目结构是这样的;

├── apps
│   ├── authuser/
│   │   ├── __init__.py
│   │   ├── apps.py
│   │   ├── models/
│   │   │   ├── __init__.py
│   │   │   └── user.py
│   │   ├── utils
│   │   │   ├── backends.py
│   │   │   └── __init__.py
│   ├── blog/
│   │   ├── __init__.py
│   │   ├── apps.py
│   │   └── models/
│   ├── product/
│   │   ├── __init__.py
│   │   └── apps.py
├── core/
│   ├── asgi.py
│   ├── __init__.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
├── templates/
├── db.sqlite3
└── manage.py

1。 settings.py;

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

    # major apps
    'apps.authuser','apps.blog','apps.product',]

# Custom Auth User Model
AUTH_USER_MODEL = 'apps.authuser.User'
AUTHENTICATION_BACKENDS = [
    'django.contrib.auth.backends.ModelBackend','apps.authuser.utils.backends.CustomAuthBackend'
]

2。 apps/authuser/apps.py;

# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.apps import AppConfig
from django.utils.translation import ugettext_lazy as _


class AuthUserConfig(AppConfig):
    name = 'apps.authuser'
    verbose_name = _('App Auth User')

3。 apps/authuser/__init__.py;

# -*- coding: utf-8 -*-
from __future__ import unicode_literals

default_app_config = 'apps.authuser.apps.AuthUserConfig'

4。 apps/authuser/models/__init__.py;

# -*- coding: utf-8 -*-
from __future__ import unicode_literals

# to custom the Auth User Model
# you need to import that model into this __init__.py file
# because we use the folder to manage it models.py
from .user import User

5。 apps/authuser/models/user.py;

# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.db import models
from django.urls import reverse
from django.conf import settings
from django.contrib.auth.models import AbstractUser
from django.utils.translation import ugettext_lazy as _


class User(AbstractUser):
    """
    extending from base `AbstractUser`
    to rewrite the `id` AutoField to `id` `BigAutoField`
    """
    id = models.BigAutoField(primary_key=True)

    @property
    def fullname(self):
        if hasattr(self,'profile') and self.profile:
            return self.profile.display_name
        return self.get_full_name() or self.username

我也尝试使用此解决方https://stackoverflow.com/a/50179553/6396981,但仍然无法正常工作。

(env-mysite) ➜  mysite git:(development) ✗ ./manage.py runserver
Watching for file changes with StatReloader
Exception in thread django-main-thread:
Traceback (most recent call last):
  File "/home/binpy/envs/env-mysite/lib/python3.7/site-packages/django/db/models/utils.py",line 11,in make_model_tuple
    app_label,model_name = model.split(".")
ValueError: too many values to unpack (expected 2)

During handling of the above exception,another exception occurred:


Traceback (most recent call last):
  File "/usr/lib/python3.7/threading.py",line 926,in _bootstrap_inner
    self.run()
  File "/usr/lib/python3.7/threading.py",line 870,in run
    self._target(*self._args,**self._kwargs)
  File "/home/binpy/envs/env-mysite/lib/python3.7/site-packages/django/utils/autoreload.py",line 53,in wrapper
    fn(*args,**kwargs)
  File "/home/binpy/envs/env-mysite/lib/python3.7/site-packages/django/core/management/commands/runserver.py",line 110,in inner_run
    autoreload.raise_last_exception()
  File "/home/binpy/envs/env-mysite/lib/python3.7/site-packages/django/utils/autoreload.py",line 76,in raise_last_exception
    raise _exception[1]
  File "/home/binpy/envs/env-mysite/lib/python3.7/site-packages/django/core/management/__init__.py",line 357,in execute
    autoreload.check_errors(django.setup)()
  File "/home/binpy/envs/env-mysite/lib/python3.7/site-packages/django/utils/autoreload.py",**kwargs)
  File "/home/binpy/envs/env-mysite/lib/python3.7/site-packages/django/__init__.py",line 24,in setup
    apps.populate(settings.INSTALLED_APPS)
  File "/home/binpy/envs/env-mysite/lib/python3.7/site-packages/django/apps/registry.py",line 114,in populate
    app_config.import_models()
  File "/home/binpy/envs/env-mysite/lib/python3.7/site-packages/django/apps/config.py",line 211,in import_models
    self.models_module = import_module(models_module_name)
  File "/home/binpy/envs/env-mysite/lib/python3.7/importlib/__init__.py",line 127,in import_module
    return _bootstrap._gcd_import(name[level:],package,level)
  File "<frozen importlib._bootstrap>",line 1006,in _gcd_import
  File "<frozen importlib._bootstrap>",line 983,in _find_and_load
  File "<frozen importlib._bootstrap>",line 967,in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>",line 677,in _load_unlocked
  File "<frozen importlib._bootstrap_external>",line 728,in exec_module
  File "<frozen importlib._bootstrap>",line 219,in _call_with_frames_removed
  File "/home/binpy/envs/env-mysite/lib/python3.7/site-packages/django/contrib/admin/models.py",line 39,in <module>
    class LogEntry(models.Model):
  File "/home/binpy/envs/env-mysite/lib/python3.7/site-packages/django/db/models/base.py",line 161,in __new__
    new_class.add_to_class(obj_name,obj)
  File "/home/binpy/envs/env-mysite/lib/python3.7/site-packages/django/db/models/base.py",line 326,in add_to_class
    value.contribute_to_class(cls,name)
  File "/home/binpy/envs/env-mysite/lib/python3.7/site-packages/django/db/models/fields/related.py",line 747,in contribute_to_class
    super().contribute_to_class(cls,name,private_only=private_only,**kwargs)
  File "/home/binpy/envs/env-mysite/lib/python3.7/site-packages/django/db/models/fields/related.py",line 318,in contribute_to_class
    lazy_related_operation(resolve_related_class,cls,self.remote_field.model,field=self)
  File "/home/binpy/envs/env-mysite/lib/python3.7/site-packages/django/db/models/fields/related.py",line 80,in lazy_related_operation
    return apps.lazy_model_operation(partial(function,**kwargs),*model_keys)
  File "/home/binpy/envs/env-mysite/lib/python3.7/site-packages/django/db/models/fields/related.py",line 78,in <genexpr>
    model_keys = (make_model_tuple(m) for m in models)
  File "/home/binpy/envs/env-mysite/lib/python3.7/site-packages/django/db/models/utils.py",line 20,in make_model_tuple
    "must be of the form 'app_label.ModelName'." % model
ValueError: Invalid model reference 'apps.authuser.User'. String model references must be of the form 'app_label.ModelName'.

当我尝试使用AUTH_USER_MODEL = 'authuser.User'时,它显示一个错误AttributeError: 'Settings' object has no attribute 'authuser_MODEL'

Traceback (most recent call last):
  File "/usr/lib/python3.7/threading.py",line 121,in inner_run
    self.check_migrations()
  File "/home/binpy/envs/env-mysite/lib/python3.7/site-packages/django/core/management/base.py",line 459,in check_migrations
    executor = MigrationExecutor(connections[DEFAULT_DB_ALIAS])
  File "/home/binpy/envs/env-mysite/lib/python3.7/site-packages/django/db/migrations/executor.py",line 18,in __init__
    self.loader = MigrationLoader(self.connection)
  File "/home/binpy/envs/env-mysite/lib/python3.7/site-packages/django/db/migrations/loader.py",in __init__
    self.build_graph()
  File "/home/binpy/envs/env-mysite/lib/python3.7/site-packages/django/db/migrations/loader.py",line 210,in build_graph
    self.load_disk()
  File "/home/binpy/envs/env-mysite/lib/python3.7/site-packages/django/db/migrations/loader.py",line 112,in load_disk
    migration_module = import_module(migration_path)
  File "/home/binpy/envs/env-mysite/lib/python3.7/importlib/__init__.py",in _call_with_frames_removed
  File "/home/binpy/envs/env-mysite/python.web.id/apps/blog/migrations/0001_initial.py",line 9,in <module>
    class Migration(migrations.Migration):
  File "/home/binpy/envs/env-mysite/python.web.id/apps/blog/migrations/0001_initial.py",line 14,in Migration
    migrations.swappable_dependency(settings.authuser_MODEL),File "/home/binpy/envs/env-mysite/lib/python3.7/site-packages/django/conf/__init__.py",line 84,in __getattr__
    val = getattr(self._wrapped,name)
AttributeError: 'Settings' object has no attribute 'authuser_MODEL'

当我尝试在label = 'apps.authuser'添加AuthUserConfig时,它向我显示了该错误

ValueError: Invalid model reference 'apps.authuser.User_groups'.
String model references must be of the form 'app_label.ModelName'.

解决方法

如错误所述。您只需要应用名称和型号名称即可。

String model references must be of the form 'app_label.ModelName'.

因此auth模型的用户应该是

AUTH_USER_MODEL = 'authuser.User'

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。