2012-05-25 69 views
0

我試圖覆蓋我的模型之一的保存方法。內保存方法我想用模型的另一種方法,就像這樣:保存方法中的模型類的使用方法

class MyModel(models.Model): 
    name = models.CharField(max_length=255) 

    def do_something(self): 
     pass 

    def save(self,*args, **kwargs): 
     self.do_something() 
     super(MyModel, self).save(*args, **kwargs) 

這不起作用,因爲Django的執行時保存,對象是一個通用模型庫類,而不是我的ModeBase的子類。所以我得到:

unbound method do_something() must be called with MyModel instance as first argument (got ModelBase instance instead) 

什麼是正確的方法來做到這一點?

+0

可以調用方法'超(爲MyModel,個體經營).save (* args,** kwargs)'在你調用'self.do_something()'之前?因此,只需切換兩個,以便首先創建對象。 – nates

+0

我試過了 - 它似乎沒有幫助。另外,在保存模型之前,我想確保'do_something'成功完成。 – prauchfuss

回答

0

你應該把argskwargs以覆蓋save()方法太:

class MyModel(models.Model): 
    name = models.CharField(max_length=255) 

    def do_something(self): 
     pass 

    def save(self, *args, **kwargs): 
     self.do_something() 
     super(MyModel, self).save(*args, **kwargs) 

你也忘了self參數do_something()

UPDATE

我不太明白你的問題。如果你想調用不受約束的方法do_something,用一個定義它的類MyModel外面,只是把它從save()像`do_something(個體經營):

class MyModel(class.Model): 
    def save(self, *args, **kwargs): 
    do_something(self) 
    super(MyModel, self).save(*args, **kwargs) 

def do_someting(my_model_instance): 
    assert isinstance(my_model_instance, MyModel) 
    ... 
+0

謝謝。現在應該是好的。這是很難調試編寫的代碼! – prauchfuss

+0

歡迎。如果該答案解決了您的問題,請考慮點擊複選標記以將此答覆標記爲已接受。 –

+0

這確實不能解決實際問題。我們會看看還有什麼其他的。 – prauchfuss

相關問題