Как я могу использовать аналогичные функции во всех моделях в Django - PullRequest
1 голос
/ 29 июня 2011

У меня есть три функции, которые мне нужны в каждой модели 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 ]

2 голосов
/ 29 июня 2011

Вы можете использовать множественное наследование:

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__)

Я не проверял это, но оно должно работать.

0 голосов
/ 29 июня 2011

Даниэль ответил правильно.Но если вам нужна строка, то есть имя текущей модели, вы можете использовать:

self._meta.verbose_name_raw
0 голосов
/ 29 июня 2011

Тебе вообще ничего не нужно. self уже относится к соответствующему классу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...