Django:在迁移运行时更改设置值

Posted

技术标签:

【中文标题】Django:在迁移运行时更改设置值【英文标题】:Django: Change settings value during run-time in migrations 【发布时间】:2019-02-26 18:39:29 【问题描述】:

我试图在创建迁移时在运行时更改settings.py 中的值。

settings.py:

...
magicVar = "initValue"

0002_init:

...
def change_magicVar(apps, schema_editor):
    settings.magicVar = "newValue"
...

operations = [
    migrations.RunPython(change_magicVar),
]
...

0003_changed_migrations:

...
def print_magicVar(apps, schema_editor):
   # Yay! It prints the correct value
   print (settings.magicVar) # prints: newValue
...

operations = [
   migrations.RunPython(print_magicVar),
   migrations.CreateModel(
     name='MagicModel',
        fields=[
            ('someMagic', 
               models.ForeignKey(
                  # Oops! This still has the old value, i.e *initValue*
                  # I want to achieve the *newValue* here!
                  default=settings.magicVar,
                  ... 
    )),

我想要迁移中的更改值,但看起来该值已被缓存。 django 是否提供了一种抽象来刷新迁移缓存并在其中添加新值?如果不是,我必须通过哪些可能的选项来实现默认值?

注意:我尽量避免使用this solution,因为我的数据库可能会提供数百万条记录,并且对它们进行迭代并不理想。

出于外部原因,我也试图避免django-livesettings

谢谢!

【问题讨论】:

【参考方案1】:

您无法以这种方式实现它。您可以查看https://github.com/jazzband/django-constance。

【讨论】:

谢谢,这对我有帮助。另外,感谢 Jason,他提供了相同的 response on mailing list :)

以上是关于Django:在迁移运行时更改设置值的主要内容,如果未能解决你的问题,请参考以下文章

在运行时更改 Django 设置

运行 make 迁移时出现 Django 关系错误

Django 迁移未检测到所有更改

Django 迁移使用 RunPython 提交更改

Django 迁移使用 RunPython 提交更改

Django在运行服务器和进行迁移时出错:[重复]