Декоратор @property в моделях Django

В этой короткой заметке я покажу как использовать декоратор @property  в моделях Django, он поможет сделать код более чистым. Вместо добавления дополнительных полей в нашу модель, мы определим пользовательское свойство и будем использовать для его вычисления уже существующие поля модели.

Например у нас есть модель Events содержащая название и дату окончания события:

class Events(models.Model):
    name = models.CharField(max_length=255)
    end_date = models.DateField()

В нашем приложении может не один раз потребоваться узнать не просрочено ли событие относительно текущей даты. Чтобы каждый раз не делать условие для проверки, можно добавить эту проверку в модель в виде свойства:

class Event(models.Model):
    name = models.CharField(max_length=255)
    end_date = models.DateField()

 @property
    def is_expired(self):
        return date.today() > self.end_date

Теперь где-нибудь во view нам нужно всего лишь вызвать это свойство:

event = Event.objects.first()

if event.is_expired:
  # do something

Вот и все )

Если написать просто функцию в модели, без использования декоратора  @property, то для доступа нам нужно будет вызывать функцию:

if event.is_expired():
  # do something

Хостинг для ваших проектов