何时加载django.conf.global_settings?

时间:2014-04-22 09:54:54

标签: python django django-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(我将每个环境的设置文件分开.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.

所以,我有两个问题。

  1. 问题在于我将settings.py与每个环境分开。
  2. from django.global_settings import AUTH_USER_MODEL导入myproject.settings
  3. 我在这个时候解决了from myproject.settings.base import AUTH_USER_MODEL

1 个答案:

答案 0 :(得分:2)

顾名思义,

global_settings是Django提供的全局默认设置。当然,默认值是' auth.User'。

由于您在自己的设置中覆盖它,因此应该导入它。但正如文档所述,导入当前设置的方式始终是from django.conf import settings,而不是在项目中显式导入设置文件。

另请注意,虽然这不是在这里使用设置 - 这可能会导致启动时出现一些依赖性问题 - 您应该使用get_user_model()中的django.contrib.auth,如the documentation中所述