django.conf.global_settings何时加载?
我创建了一个自定义用户模型,使用的是“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.py syncdb
的时候,我的控制台窗口被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
这个问题。
1 个回答
2
global_settings
就是它名字的意思,代表了Django提供的全局默认设置。所以默认情况下是 'auth.User'。
因为你在自己的设置中进行了覆盖,所以应该导入你自己的设置。不过,正如文档所说,导入当前设置的方式总是 from django.conf import settings
,而不是直接导入你项目中的某个设置文件。
另外要注意的是,这里最好不要直接使用设置,因为这样可能会在启动时引发一些依赖问题。你应该使用 get_user_model()
,这个函数来自 django.contrib.auth
,具体的解释可以参考 文档。