我收到错误
ImproperlyConfigured at /admin/
AUTH_USER_MODEL refers to model 'ledger.User' that has not been installed
我只在生产服务器上获取它。不是当我通过localhost运行时。首先,它只是在我提出某个要求时。然后我认为我的数据库必须不同步所以我删除了所有表,然后运行manage.py syncdb。现在,它似乎已经传播,甚至会向管理员抛出错误。
我之前从未见过这个错误,也无法弄清楚这笔交易是什么。我在settings.py中定义了AUTH_USER_MODEL:
...
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'ledger',
'extension',
'plugin',
'social.apps.django_app.default',
)
AUTH_USER_MODEL = 'ledger.User'
...
models.py:
...
class User(AbstractUser):
def __unicode__(self):
return self.username
balance = models.IntegerField(default=0)
total_pledged = models.IntegerField(default=0)
last_pledged = models.ForeignKey('Transaction', related_name='pledger', blank=True, null=True)
extension_key = models.CharField(max_length=100, null=True, blank=True)
plugin_key = models.CharField(max_length=100, null=True, blank=True)
ghosted = models.BooleanField(default=False)
def save(self, *args, **kwargs):
print('saving')
try:
self.company.save()
except:
print('no company')
super(User, self).save(*args, **kwargs)
...
答案 0 :(得分:1)
如果您的其他任何应用无法加载,则会出现此错误 - 即使它与自定义用户模型无关。在我的情况下,我安装了'gcharts'应用程序,但需要安装google-visualization-python库。两者都与用户模型无关,但django无论如何都返回此错误。
以下内容应揭示您问题的真正根本原因:
答案 1 :(得分:0)
我知道这是一个非常老的问题,但是我想分享自己的发现(我多么愚蠢!)。
就我而言,问题是我的自定义用户模型在abstract=True
类中设置了Meta
(在您复制基类代码以覆盖它:P时发生)。
答案 2 :(得分:0)
我遇到了这个问题,可以通过正确地理解Django文件的结构来解决。
教程中的说明通常不同且令人困惑。
您需要了解,在安装Django时,有两个关键步骤:
1:创建一个项目 2:创建一个应用程序(应用程序)
通过遵循官方的Django教程来说明问题:
https://docs.djangoproject.com/en/3.1/intro/tutorial01/
步骤1:创建一个新项目:
django-admin startproject mysite
您现在将找到一个名为“ mysite”的目录
**步骤2:** 本教程说: 要创建您的应用,请确保您与manage.py位于同一目录,然后键入以下命令: 这是刚创建的目录,所以请转到:
cd mysite
,如果是ls,那么您将在此目录中找到: 一个名为 manage.py 的文件 令人困惑的是,另一个名为 mysite
的目录第3步: 现在,该教程介绍了如何创建django应用程序:
python manage.py startapp polls
所以ls现在显示这些文件:
manage.py
mysite
投票
Consufion可能现在已设置,因为所有这些文件都位于mysite目录下。
步骤4: 如果您想使用自定义用户模型,那么官方建议是在项目开始之前就进行此移植。
确定,因此编辑mysite / settings.py并添加以下行:
AUTH_USER_MODEL ='投票用户'
并编辑民意调查/模型并添加:
from django.db import models
# Create your models here.
from django.contrib.auth.models import AbstractUser
class User(AbstractUser):
pass
**步骤5:** 因此,现在应该可以进行第一次迁移了,对吧?
python manage.py makemigrations
可是SPLAT!
Traceback (most recent call last):
File "/opt/theapp/venv3.8/lib/python3.8/site-packages/django/apps/registry.py", line 156, in get_app_config
return self.app_configs[app_label]
KeyError: 'polls'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/opt/theapp/venv3.8/lib/python3.8/site-packages/django/contrib/auth/__init__.py", line 157, in get_user_model
return django_apps.get_model(settings.AUTH_USER_MODEL, require_ready=False)
File "/opt/theapp/venv3.8/lib/python3.8/site-packages/django/apps/registry.py", line 206, in get_model
app_config = self.get_app_config(app_label)
File "/opt/theapp/venv3.8/lib/python3.8/site-packages/django/apps/registry.py", line 163, in get_app_config
raise LookupError(message)
LookupError: No installed app with label 'polls'.
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "manage.py", line 22, in <module>
main()
File "manage.py", line 18, in main
execute_from_command_line(sys.argv)
File "/opt/theapp/venv3.8/lib/python3.8/site-packages/django/core/management/__init__.py", line 401, in execute_from_command_line
utility.execute()
File "/opt/theapp/venv3.8/lib/python3.8/site-packages/django/core/management/__init__.py", line 377, in execute
django.setup()
File "/opt/theapp/venv3.8/lib/python3.8/site-packages/django/__init__.py", line 24, in setup
apps.populate(settings.INSTALLED_APPS)
File "/opt/theapp/venv3.8/lib/python3.8/site-packages/django/apps/registry.py", line 122, in populate
app_config.ready()
File "/opt/theapp/venv3.8/lib/python3.8/site-packages/django/contrib/admin/apps.py", line 24, in ready
self.module.autodiscover()
File "/opt/theapp/venv3.8/lib/python3.8/site-packages/django/contrib/admin/__init__.py", line 24, in autodiscover
autodiscover_modules('admin', register_to=site)
File "/opt/theapp/venv3.8/lib/python3.8/site-packages/django/utils/module_loading.py", line 47, in autodiscover_modules
import_module('%s.%s' % (app_config.name, module_to_search))
File "/usr/lib/python3.8/importlib/__init__.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
File "<frozen importlib._bootstrap>", line 991, in _find_and_load
File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 783, in exec_module
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
File "/opt/theapp/venv3.8/lib/python3.8/site-packages/django/contrib/auth/admin.py", line 6, in <module>
from django.contrib.auth.forms import (
File "/opt/theapp/venv3.8/lib/python3.8/site-packages/django/contrib/auth/forms.py", line 21, in <module>
UserModel = get_user_model()
File "/opt/theapp/venv3.8/lib/python3.8/site-packages/django/contrib/auth/__init__.py", line 161, in get_user_model
raise ImproperlyConfigured(
django.core.exceptions.ImproperlyConfigured: AUTH_USER_MODEL refers to model 'polls.User' that has not been installed
(venv3.8) ubuntu@ip-172-26-5-79:~/mysite$
有错误: .ImproperlyConfigured:AUTH_USER_MODEL指的是尚未安装的模型'polls.User'
因此,我们通过修改mysite / settings.py来解决此问题:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
对此:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'polls',
]
请注意,您需要添加的行是“ polls”,这是Django应用程序的名称。
现在重试:
(venv3.8) ubuntu@ip-172-26-5-79:~/mysite$ python manage.py makemigrations
Migrations for 'polls':
polls/migrations/0001_initial.py
- Create model User
(venv3.8) ubuntu@ip-172-26-5-79:~/mysite$
成功!!!
所以,这个长篇小说的重点是要清楚地表明Django必须知道您的Django应用程序在哪里。而您告诉Django的地方是在settings.py文件的INSTALLED_APPS中。
这确实使Django项目与Django应用之间的区别感到困惑,并且由于创建两个具有相同名称的目录的奇怪建议而变得更加糟糕。
相反,为了使事情更清楚,我建议您在Django项目名称后加上“ project”,在Django应用程序名称后加上“ app”,并且不要为顶层目录提供与项目相同的名称。 / p>
因此建立一个新项目:
(venv3.8) ubuntu@ip-172-26-5-79:~$ mkdir container
(venv3.8) ubuntu@ip-172-26-5-79:~$ cd container/
(venv3.8) ubuntu@ip-172-26-5-79:~/container$ django-admin startproject myproject .
(venv3.8) ubuntu@ip-172-26-5-79:~/container$ ls
manage.py myproject
(venv3.8) ubuntu@ip-172-26-5-79:~/container$ python manage.py startapp myapp
(venv3.8) ubuntu@ip-172-26-5-79:~/container$ ls -lah
total 20K
drwxrwxr-x 4 ubuntu ubuntu 4.0K Oct 27 05:30 .
drwxr-xr-x 11 ubuntu ubuntu 4.0K Oct 27 05:29 ..
-rwxrwx--- 1 ubuntu ubuntu 665 Oct 27 05:30 manage.py
drwxrwxr-x 3 ubuntu ubuntu 4.0K Oct 27 05:30 myapp
drwxrwxr-x 3 ubuntu ubuntu 4.0K Oct 27 05:30 myproject
(venv3.8) ubuntu@ip-172-26-5-79:~/container$
现在,当您处理Django站点时以及处理Django项目时,对您来说将变得更加清晰,而不会再被多个同名目录所困扰。
答案 3 :(得分:0)
没有足够的代表对@Duke Dougal 解决方案发表评论,所以我正在创建一个新评论。
遇到了同样的问题,但上述解决方案都不适合我。最后通过将我的应用程序(我有我的用户模型的地方)移动到已安装应用程序的最后来修复它(即使在我所有其他应用程序之后)。所以是这样的:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'my_other_app_1',
'my_other_app_2',
'polls', # <-- App with my custom User model
]