Декоратор @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