2014-03-25 113 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