【问题标题】:When is django.conf.global_settings loaded?django.conf.global_settings 什么时候加载?
【发布时间】:2014-04-22 09:54:53
【问题描述】:

我使用“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.

所以,我有两个问题。

  1. 问题是我把settings.py分开了每个环境。
  2. from django.global_settings import AUTH_USER_MODEL 是否导入 myproject.settings

而我这次解决了from myproject.settings.base import AUTH_USER_MODEL

【问题讨论】:

  • 非常感谢!!我知道 global_settings 是您回答的 django 默认设置。 get_user_model 方法非常有用。我从现在开始在我的项目中使用get_user_model 方法!

标签: python django django-settings


【解决方案1】:

global_settings,顾名思义,是 Django 提供的全局默认设置。所以当然默认是'auth.User'。

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

另外请注意,您应该使用django.contrib.auth 中的get_user_model(),而不是完全使用此处的设置(这可能会导致启动时出现一些依赖性问题),如the documentation 中所述。

【讨论】:

    猜你喜欢
    • 2021-01-19
    • 2013-02-27
    • 2011-11-25
    • 1970-01-01
    • 2019-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多