Представим, что в нашем Django-проекте есть модель Конкурс (Contest). Конкурс ежегодный, поэтому характеризующая его модель будет иметь атрибут year.
Как же нам в классах представлений получить год последнего прошедшего конкурса?
Конечно! Написать для модели Contest метод, который будет возвращать этот год.
Метод должен быть статическим, т.е. для его вызова нам вовсе будет не нужно создавать экземпляр класса Contest.
Для создания статического метода класса вы можете использовать 2 подхода:
1. Использовать декоратор @classmethod. В этом случае вам нужно указать у метода аргумент cls, куда будет передаваться сам класс.
Внимание: лучше называть аргумент cls, а не self, т.к. для вызова этого метода экземпляр класса не нужен. После аргумента cls вы можете указать свои аргументы:
def get_active_year(cls, myarg1, myarg2): ...
2. Использовать декоратор @staticmethod. В этом случае указывать аргументы у метода не обязательно - метод будет работать как обычная функция. Разумеется, вы можете передавать в эту функцию свои аргументы:
def get_active_year(myarg1, myarg2): ...
Как же нам в классах представлений получить год последнего прошедшего конкурса?
Конечно! Написать для модели Contest метод, который будет возвращать этот год.
Метод должен быть статическим, т.е. для его вызова нам вовсе будет не нужно создавать экземпляр класса Contest.
Для создания статического метода класса вы можете использовать 2 подхода:
1. Использовать декоратор @classmethod. В этом случае вам нужно указать у метода аргумент cls, куда будет передаваться сам класс.
Внимание: лучше называть аргумент cls, а не self, т.к. для вызова этого метода экземпляр класса не нужен. После аргумента cls вы можете указать свои аргументы:
def get_active_year(cls, myarg1, myarg2): ...
class Contest(models.Model): # ... атрибуты класса @classmethod def get_active_year(cls): contests = Contest.objects.all().order_by('-year') # Если конкурсов не найдется, возвратим None if len(contests) > 0: return contests[0].year else: return None
2. Использовать декоратор @staticmethod. В этом случае указывать аргументы у метода не обязательно - метод будет работать как обычная функция. Разумеется, вы можете передавать в эту функцию свои аргументы:
def get_active_year(myarg1, myarg2): ...
class Contest(models.Model): # ... атрибуты класса @staticmethod def get_active_year(): contests = Contest.objects.all().order_by('-year') # Если конкурсов не найдется, возвратим None if len(contests) > 0: return contests[0].year else: return None
Комментариев нет:
Отправить комментарий