2014-03-25 71 views
2

我在共享管理器类中覆盖了“get”方法,但我无法弄清楚如何获取初始调用者。例如,当我运行:如何在覆盖管理器时访问Django模型?

Animal.objects.get() -or- Plant.objects.get() 

我怎么能有“get”知道这是从动物/植物叫不经过任何参数?

这里是我的参考代码:

class CommonManager(models.Manager): 
    def get(self, *args, **kwargs): 
    print ??? #how do I print Animal or Plant here? 


class CommonModel(models.Model): 
    objects = CommonManager() 
    #stuff 

class Animal(CommonModel): 
    #stuff 

class Plant(CommonModel): 
    #stuff 

回答

1

查看源,它似乎是self.model

+0

这工作!非常感谢,我可以问一下你看过哪部分源代码?我是Django的新手,经常遇到与文档有关的问题。 – WBC

+0

它在https://docs.djangoproject.com/en/dev/topics/db/managers/#django.db.models.Manager中提到(“有关此示例的另一个要注意的是,Manager方法可以访问self.model以获得他们所附的模型类“)。虽然这很容易错过;如果你没有其他简单的方法来浏览代码/超类,那么在做一个dir(self)的时候放入Python调试器通常是一个很好的策略。 –

+0

只需''经理'在'django/db/models/manager.py'中。 – AKX