如何在Django数据迁移上下文中访问模型的自定义管理器?

时间:2019-02-01 14:58:52

标签: django django-models migration django-managers

我有一个用于多个模型的自定义模型管理器。该管理器有助于加快数据库插入速度。我需要执行数据迁移,它涉及迁移数百万个记录/对象。我的数据迁移需要我的自定义管理器。有谁知道如何获得它。在数据迁移上下文中,如果我运行model.objects,这将带回Django的模型管理器。

3 个答案:

答案 0 :(得分:0)

为什么不仅仅导入模型?

from myproj.models import MyModel
MyModel.objects.filter(field=value).update(field=new_value)

答案 1 :(得分:0)

到目前为止,我正在使用的并且似乎可靠地起作用的方法是为模型实例化本地Manager,然后将manager的model属性设置为我感兴趣的模型:

class MyManager(Manager):
    ...
    def my_create_func(self):
        ...

class MyModel(Model):
    ...
    objects = MyManager()

def data_migration(apps, schema_editor):
    model = apps.get_model(...)
    manager = MyManager()
    manager.model = model
    manager.my_create_func()

答案 2 :(得分:0)

您还可以使用管理者的use_in_migrations属性(docs):

class MyManager(models.Manager):
    use_in_migrations = True

class MyModel(models.Model):
    objects = MyManager()