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

时间:2018-09-22 17:37:40

标签: python django django-migrations

我正在尝试在创建迁移期间在运行时更改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 个答案:

答案 0 :(得分:0)

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