我使用“AbstractUser”模型创建了以下自定义用户模型。
from django.conf.global_settings import AUTH_USER_MODEL
MyCustomUser(AbstractUser):
regions = models.ManyToManyField(to='SomeModel')
class Meta:
app_label = 'myapp'
MyObject(models.Model):
owner = models.ForeignKey(to=AUTH_USER_MODEL)
我将AUTH_USER_MODEL
设置为settings/base.py
(我将每个环境的设置文件分开。例如:settings/base.py、settings/development.py)。
AUTH_USER_MODEL = 'myapp.MyCustomUser'
当我执行 python manage.pysyncdb
时,我的控制台窗口被 Django 点亮了!
myapp.MyObject: 'owner' defines a relation with the model 'auth.User', which has been swapped out. Update the relation to point at settings.AUTH_USER_MODEL.
所以,我有两个问题。
- 问题是我将settings.py 与每个环境分开了。
from django.global_settings import AUTH_USER_MODEL
是否导入myproject.settings
?
这次我解决了from myproject.settings.base import AUTH_USER_MODEL
。
最佳答案
global_settings
顾名思义,是 Django 提供的全局默认设置。所以默认值当然是“auth.User”。
由于您在自己的设置中覆盖了它,因此您应该导入它。但正如文档所述,导入当前设置的方式始终是 from django.conf import settings
,而不是在项目中显式导入设置文件。
另请注意,您应该使用 django.contrib.auth< 中的
,如 the documentation 中所述.get_user_model()
,而不是在此处使用这些设置 - 这可能会导致启动时出现一些依赖性问题
关于python - django.conf.global_settings 何时加载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23216169/