2009-06-24 91 views
1

所以,这里是一个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)没有什么

我使用了两个对象管理器在本实施例中,但同样的如果我只使用一个,情况就会发生。任何洞察为什么我似乎无法访问我的覆盖对象管理器中的方法?

+0

声明标有“A”应该产生一个“NameError”。什么是“ID”?它不应该是“self.id”吗?在标记为“B”的语句中,此“yyy()”方法的定义在哪里?另外,“total_votes()”在哪里定义? – ayaz 2009-06-24 14:58:54

+0

我修复了这个ID(我错过了这个帖子的重构)。 yyy甚至没有定义,但最终并没有抛出一个错误。 – Daniel 2009-06-24 15:00:08

回答

0

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

编辑:你可以尝试为MyObjManager创建一个构造函数。它将称为经理的构造函数。

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

看看是否有效。

+0

谢谢,为此。我对该示例进行了重构,并错过了对PollManager的引用。我编辑了这个问题。 – Daniel 2009-06-24 14:16:13

3

对于A,B和C,你不能使用自我......这是一个实例方法,自我是指实例......其中一个实例没有经理的方法。

E和F的工作原因是,您再次调用实例方法,其中您已正确声明属性。

对于A,B,C,与MyObj中取代自

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) 

我有一种情况的一个困难时期的思维,你会发现模型的实例,然后调用一个函数来获取该模型的其他情况下,虽然...(我建议你的方法可能是尴尬或不正确的,说明你的更大范围的问题可以帮助你得到一个更好的答案。)