如何更改/monkeypatch模型.auth组结构法?

2024-04-23 14:02:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用新的__str__方法修补Django组模型。 我知道如何使用monkeypatch组的管理器,但它不能使用__str__方法。你知道吗

这是我想放在组模型中的新方法:

def __str__(self):
    return self.name if 'test' not in self.name else self.virtual_group.title

虚拟组和另一个模型相关,我想取它的名称并替换它。你知道吗

我想要实现什么? 在我的数据库组中,有如下内容:

Super Group 
Extra Group 
New Group 
test_1 
test_2 
test_3 
Great Group
test_4 
(...)

测试组是具有相关名称virtual_group的一对一字段。我必须这样做,因为我需要组中唯一的名称,但可见名称可以相同。你知道吗

我只想更改__str__方法,将组名'test\ux'从相关模型的标题自动更改为普通字符串。你知道吗

我试过这样的方法:

def __str__(self):
    return self.name if 'tour' not in self.name else self.virtual_group.title

Group.__str__ = __str__

或者这个:

class Group(Group):
    def __str__(self):
        return self.name if 'tour' not in self.name else self.virtual_group.title

然后是经理:

class DefaultGroupManager(models.Manager):
    def __str__(self):
        return self.name if 'tour' not in self.name else self.virtual_group.title

    def get_queryset(self):
         (...)

dgm = DefaultGroupManager()
dgm.contribute_to_class(Group, 'objects')
Group.objects = dgm

但这些都不起作用,我没有错误,但什么也没发生

我不能创建新的扩展模型,因为这需要改变数百万行代码。从组到扩展组(Group)。你知道吗

我将感谢任何帮助!你知道吗


Tags: 方法namein模型testselfreturnif