如何在Django中的所有模型中使用类似的功能

时间:2011-06-29 08:09:02

标签: django inheritance django-models

我在每个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

如何使用继承,以便在一个类中使用三个函数而从其中继承其他函数?

3 个答案:

答案 0 :(得分: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()

(确保将MODELNAME替换为self.__class__.__name__

我没有对此进行测试,但它应该有效。

答案 1 :(得分:0)

你根本不需要任何东西。 self已经引用了相关的类。

答案 2 :(得分:0)

丹尼尔的回答是正确的。但是如果你想要一个字符串,那就是当前模型的名称,你可以使用:

self._meta.verbose_name_raw