如何在 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()
我的几个模型中都使用了自定义模型管理器。该管理器有助于加快数据库插入。我需要做一个数据迁移,涉及到数百万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()