如何在Django的所有模型中使用类似的函数
我在每个Django模型中都需要三个功能:如何在Django的所有模型中使用类似的函数,django,inheritance,django-models,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 MODEL
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
如何使用继承,以便在一个类中使用三个函数,而另一个从中继承?您根本不需要任何东西
self
已经引用了相关类。您可以使用多重继承:
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.\uuuuuuu class\uuuuuu.\uuuuuuuuu name\uuuuuuuu
)
我没有测试这个,但它应该可以工作。丹尼尔的答案是正确的。但如果需要字符串,即当前模型的名称,则可以使用:
self._meta.verbose_name_raw
对不起,我不明白,你的意思是说我在使用
MODELNAME
的地方,我可以在那里使用self
。目前我没有使用继承,所以我可以在一个类中声明所有这些,并通过替换MODELNAME来扩展其他类,就像这样return”/self.\uu class.\uu name.\uuuu/list/“
我的意思是return/{.0}/list/”。格式(self.\uu class.\uu name.
。。。我认为这显然是令人担忧的,我是python和Django方面的新手,再一次抱歉,上面的一个工作了,但这不起作用格式(self.\uuuuuuuu class.\uuuuuu name.\uuu.\uu meta.fields