我收到一个错误
ImproperlyConfigured at /admin/
AUTH_USER_MODEL refers to model 'ledger.User' that has not been installed
我只在我的生产服务器上得到它。当我通过本地主机运行时不是。首先,只有当我提出某个要求时。然后我认为我的数据库一定是不同步的所以我删除了所有表然后运行 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'
...
模型.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)
...
原文由 Chase Roberts 发布,翻译遵循 CC BY-SA 4.0 许可协议
我遇到了这个问题,通过正确理解 Django 文件的结构解决了这个问题。
教程中的说明通常各不相同且令人困惑。
你需要明白,当你安装Django时,有两个关键步骤:
1:创建项目 2:创建app(应用)
让我们按照 Django 官方教程来说明问题:
https://docs.djangoproject.com/en/3.1/intro/tutorial01/
第一步:创建一个新项目:
您现在会发现有一个名为“mysite”的目录
**第 2 步:**教程说: 要创建您的应用程序,请确保您与 manage.py 位于同一目录中并键入此命令: 这是刚刚创建的目录,因此请转到:
如果你 ls 然后你会发现在这个目录中是:一个名为 manage.py 的文件令人困惑,另一个名为 mysite 的目录
第 3 步: 现在教程说要创建您的 Django 应用程序:
所以现在 ls 显示这些文件:manage.py
我的网站
投票
Consufion 现在可能已经设置好了,因为所有这些文件都在 mysite 目录下。
第 4 步: 如果您想使用自定义用户模型,那么官方的建议是在项目开始时就做,然后再进行任何迁移。
好的,所以编辑 mysite/settings.py 并添加以下行:
AUTH_USER_MODEL = ‘polls.User’
并编辑民意调查/模型并添加:
\*\* 第 5 步:** 所以现在应该可以进行第一次迁移了,对吧?
但是啪!
存在错误:.ImproperlyConfigured:AUTH_USER_MODEL 指的是尚未安装的模型“polls.User”
所以我们通过修改 mysite/settings.py 来解决这个问题:
对此:
请注意,您需要添加的行是“polls”,这是您的 Django 应用程序的名称。
现在再试一次:
成功!!!
所以这个长篇故事的重点是要明确 Django 必须知道你的 Django 应用程序在哪里。您告诉 Django 的地方是 settings.py 文件中的 INSTALLED_APPS。
这确实混淆了 Django 项目和 Django 应用程序之间的区别,并且由于奇怪的建议创建两个具有相同名称的目录而变得更糟。
相反,为了让事情更清楚,我建议您在 Django 项目名称后加上“project”后缀,在 Django 应用程序名称后加上“app”后缀,不要给顶级目录与项目同名。
因此要建立一个新项目:
现在,当您处理 Django 站点和 Django 项目时,您会更加清楚,并且不会再因存在多个同名目录而感到困惑。