我正在尝试编写一个装饰器,用于更改django模型的管理器,如下所示:
def custom_manager(*args):
class CustomManager(models.Manager):
pass
def wrapper(cls):
cls.add_to_class('objects', CustomManager())
return cls
return wrapper
@custom_manager()
class SomeModel(models.Model):
pass
问题似乎是默认管理器已经采用objects
属性,必须先从模型中删除它。简单地在装饰器中设置cls.objects = CustomManager()也不起作用。
如果我使用一些未使用的属性名称(即不是objects
),一切正常,但我想完全替换objects
属性以使所有应用程序(例如DjangoAdmin等)使用此自定义管理器。
那么有没有办法从模型中正确删除默认管理器或以其他方式修复它?