我使用“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
(我将每个环境的设置文件分开.e.x: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.
所以,我有两个问题。
from django.global_settings import AUTH_USER_MODEL
导入myproject.settings
?我在这个时候解决了from myproject.settings.base import AUTH_USER_MODEL
。
答案 0 :(得分:2)
global_settings
是Django提供的全局默认设置。当然,默认值是' auth.User'。
由于您在自己的设置中覆盖它,因此应该导入它。但正如文档所述,导入当前设置的方式始终是from django.conf import settings
,而不是在项目中显式导入设置文件。
另请注意,虽然这不是在这里使用设置 - 这可能会导致启动时出现一些依赖性问题 - 您应该使用get_user_model()
中的django.contrib.auth
,如the documentation中所述