我正在尝试编写一个装饰器来更改 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 等)使用此自定义管理器。那么有没有办法从模型中正确删除默认管理器或以其他方式修复它?
最佳答案
我觉得应该是这样的:
def custom_manager(cls):
class CustomManager(models.Manager):
pass
cls.objects= CustomManager()
return cls
@custom_manager()
class SomeModel(models.Model):
pass
关于django - 使用装饰器更改 django 模型 '.objects' 的管理器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49864115/