Django对象管理器问题

时间:2009-06-24 14:02:43

标签: django

所以这是Django向导的问题。我继承了一个对象管理器,如下所示:

class MyObjManager(models.Manager):

    def total_values(self, myobj_id):
                return 49

    def what_the_heck(self, poll_id):
                return 48

class TestMe():

        def what_the_heck(self, poll_id):
               return 47

现在,如果我按如下方式创建一个使用此对象管理器的模型,它似乎不起作用。

class MyObj(models.Model):
    x = models.CharField(max_length=200)
    y = models.DateTimeField('date published')
    objects = MyObjManager()
    kb = MyObjManager()
    testMe = TestMe()

    def total_values(self):     
        #A return self.objects.total_values(1)
            #B return self.objects.yyy(1) 
            #C return self.kb.what_the_heck(1)
            #D return 50
            #E return self.testMe.what_the_heck(1)
            #F return self.objects.what_the_heck(1)

现在假设A,B,C,D,E分别被注释掉一个。如果我调用myObj.total_values,结果如下。 (其中myObj是MyObj的实例) A)没什么 B)没什么 C)没什么 D)50 E)47 F)没什么

在这个例子中我使用了两个对象管理器,但是如果我只使用一个对象管理器就会发生同样的事情。有关为什么我似乎无法访问我的覆盖对象管理器中的方法的任何见解?

2 个答案:

答案 0 :(得分:3)

对于A,B和C,你不能使用self ...这是一个实例方法,self指的是那个实例......实例没有管理器方法。

E和F起作用,因为你再次调用实例方法,你已经正确地声明了属性。

对于A,B,C,用MyObj替换self

class MyObj(models.Model):
    x = models.CharField(max_length=200)
    y = models.DateTimeField('date published')
    objects = MyObjManager()
    kb = MyObjManager()
    testMe = TestMe()

    def total_values(self):             
        #A return MyObj.objects.total_values(1)
        #B return MyObj.objects.yyy(1) 
        #C return MyObj.kb.what_the_heck(1)
        #D return 50
        #E return self.testMe.what_the_heck(1)
        #F return self.objects.what_the_heck(1)

我很难想到你会找到一个模型实例的场景,然后调用一个函数来获取该模型的其他实例,但是......(我建议你的方法可能尴尬或不正确,说明你更大的范围问题可能会帮助你得到更好的答案。)

答案 1 :(得分:0)

不清楚PollManager是否实际上是从MyObjManager继承的。你的意思是打电话给你的班级PollManager吗?

编辑:您可以尝试为MyObjManager创建构造函数。它会调用Manager的构造函数。

def __init__(self):
    models.Manager.__init__(self)

看看是否有效。