2011-06-29 24 views
1

我有三個功能,我需要在每一個Django的型號:如何使用所有型號類似的功能在Django

def __unicode__(self): 
      return self.MODELNAME_name 

def get_absolute_url(self): 
      return "/MODELNAME/list/" 

def get_fields(self): 
      return [(field, field.value_to_string(self)) for field in MODELNAME._meta.fields] 

唯一不同的是MODELNAME

如何使用繼承,以便我在一個類中使用了三個函數,而其他的繼承了它?

回答

2

您可以使用多重繼承:

class CommonFunctions(object): 
    def __unicode__(self): 
     return self.MODELNAME_name 
    def get_absolute_url(self): 
     return "/MODELNAME/list/" 
    def get_fields(self): 
     return [(field, field.value_to_string(self)) for field in MODELNAME._meta.fields] 

class ZeModel(models.Model, CommonFunctions): 
    [...] 

x = ZeModel() 
x.get_absolute_url() 

(請確保您有self.__class__.__name__替換MODELNAME

我沒有測試這一點,但它應該工作。

+0

通過替換MODELNAME,你的意思就像這個'return「/self.__class__.__name__/list/」' – user2134226

+0

我的意思是'return「/ {0}/list /「。format(self .__ class __.__ name __)'...我認爲這很明顯 –

+0

對不起,我是新手在python和django – user2134226

0

你根本不需要任何東西。 self已經指相關類。

+0

很抱歉,但我無法理解,U的意思是說我在哪裏使用'MODELNAME',我可以用'自我「。目前我沒有使用繼承,所以我可以在一個類中聲明所有內容,並從其中擴展其他類 – user2134226

0

Daniel的答案是對的。但是,如果你想有一個字符串,它是當前模型的名字,你可以使用:

self._meta.verbose_name_raw 
相關問題