像模型参考一样的django迁移

时间:2016-07-22 12:46:54

标签: django django-models

说我有这样的模型:

class Book(models.Model):
    name = models.CharField(max_length=100)

    def save(self, *args, **kwargs):
        self.name = "Foo"
    super(Book, self).save(*args, **kwargs)

现在每当我创建或更新任何Book类型实例时,它的名称都将设置为“Foo”。没关系。这正是我想要的!

同时在django迁移中如果我使用migrations.RunPython我会得到特殊的django应用程序实例,这就是迁移文件中的东西:

Book = apps.get_model('my_app.Book')
book = Book()
book.name = 'Young Life'
book.save() 
print book.name
>> 'Young Life'

我的自定义保存方法被忽略了。

问题 - 如何让我的模型的行为与迁移中的模式相同?或者,在使用不在django迁移中的实例时,如何忽略我的自定义构建的保存方法?

1 个答案:

答案 0 :(得分:1)

好的想出了我自己。

from django.apps import apps
from django.db.migrations.state import ProjectState

naked_apps = ProjectState.from_apps(apps).apps
Book = naked_apps.get_model('my_app.Book')

book = Book()
book.name = 'Young Life'
book.save() 
print book.name
>> 'Young Life'