2010-10-13 88 views
11

使用例如Python/Django:添加自定義模型方法?

class model(models.Model) 
    .... 
    def my_custom_method(self, *args, **kwargs): 
     #do something 

當我嘗試pre_save期間調用此方法,保存,post_save等,Python會引發一個TypeError;未綁定的方法。

一個如何添加,可以以同樣的方式像model.objects.get()等執行自定義模型的方法呢?

編輯:使用super(model, self).my_custom_method(*args, **kwargs)但在這種情況下,Python中說,模型沒有屬性my_custom_method

回答

25

你是如何調用此方法試過嗎?您已經定義了一個實例方法,該方法只能在類的實例上調用,而不能在類本身上調用。換句話說,一旦你有一個名爲mymodelinstancemodel的實例,你可以做mymodelinstance.my_custom_method()

如果你想在上調用它,你需要定義一個classmethod。您可以使用您的方法的@classmethod修飾器來完成此操作。請注意,按照慣例,類方法的第一個參數是cls,而不是self。有關classmethod的詳細信息,請參閱the Python documentation。但是,如果您實際想要做的是添加一個執行查詢集級操作的方法,如objects.filter()objects.get(),那麼最好的方法是定義一個自定義管理器並在其中添加您的方法。那麼你將能夠做到model.objects.my_custom_method()。再次請參閱經理上的Django documentation

0

如果你正在爲你的模型實現一個Signal,它不一定需要在模型類中定義。您可以在類之外定義它,並將類名作爲參數傳遞給connect函數。

但是,在你的情況下,你需要模型對象來訪問該方法。

相關問題