说我有这样的模型:
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迁移中的实例时,如何忽略我的自定义构建的保存方法?
答案 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'