简体   繁体   English

Django - 具有多个继承类的调用管理器

[英]Django - call Manager with multiple inherited classes

So I have this class that helps me override the update method of a queryset:所以我有这个 class 可以帮助我覆盖查询集的更新方法:

class QuerySetUpdateOverriden(QuerySet, object):
    def update(self, *args, **kwargs):
        super().update(*args, **kwargs)
        if hasattr(self, 'method_from_object'):
            self.method_from_object()
            return

and here's my class where I use it:这是我使用它的 class :

class MyObject:
    objects = QuerySetUpdateOverriden.as_manager()
    def method_from_object(self):
        print("called")

the print statement is never reached.打印语句永远不会到达。

And I get why - the objects field doesn't inherit MyObject too.我明白了 - 对象字段也没有继承 MyObject 。

So, the question is - how can I make it inherit MyObject so method_from_object will be called?所以,问题是 - 我怎样才能让它继承 MyObject 所以 method_from_object 将被调用?

Thanks.谢谢。

You test if self has a method called 'method_from_object', but your QuerySetUpdateOverriden has no method call like this.您测试self是否有一个名为“method_from_object”的方法,但您的QuerySetUpdateOverriden没有这样的方法调用。 And MyObject does not inherit from QuerySetUpdateOverriden .并且MyObject不继承自QuerySetUpdateOverriden

This code would be work i think:我认为这段代码可以工作:

class MyObjectManager(QuerySetUpdateOverriden.as_manager()):

    def method_from_object(self):
        print("called")


class MyObject(models.Model):
    objects = QuerySetUpdateOverriden.as_manager()


声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM