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

How do I access my model's custom manager in a Django data migration context?

我的几个模型中都使用了自定义模型管理器。该管理器有助于加快数据库插入。我需要做一个数据迁移,涉及到数百万records/objects的迁移。我的数据迁移需要我的自定义管理器。有谁知道如何得到它。在数据迁移上下文中,如果我 运行 model.objects 这会返回 Django 的模型管理器。

为什么不直接导入您的模型?

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

截至目前,我正在使用的方法似乎可靠地工作是为模型实例化本地管理器,然后将管理器的模型属性设置为我感兴趣的模型:

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()

您也可以使用经理的 use_in_migrations 属性 (docs):

class MyManager(models.Manager):
    use_in_migrations = True

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