gpt4 book ai didi

django - 使用装饰器更改 django 模型 '.objects' 的管理器

转载 作者:行者123 更新时间:2023-12-04 14:00:14 27 4
gpt4 key购买 nike

我正在尝试编写一个装饰器来更改 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com