Как, например, у меня есть модель с несколькими статусами.
class Task(models.Model):
TO_DO = 'to_do'
IN_PROGRESS = 'in_progress'
DONE = 'done'
TASK_STATUSES = (
(TO_DO, _('To do')),
...
)
status = models.CharField(max_length=256, choices=TASK_STATUSES)
creator = models.ForeignKey('user.User', on_delete=models.CASCADE)
def is_to_do(self):
return self.status == self.TO_DO
def is_in_progress(self):
return self.status == self.IN_PROGRESS
def is_done(self):
return self.status == self.DONE
И у меня есть конечная точка, где я хочу выполнить действие по моей задаче.Перед этим я хочу проверить, разрешено ли выполнять это действие в зависимости от состояния объекта и других вещей.У меня может быть несколько if statements
вроде:
obj = get_object()
if object.is_in_progress() and object.creator.name = '...':
raise NotAcceptable(detail=_('...'))
if ...
...
else:
obj.update_status()
Каждое исключение может иметь свое собственное сообщение об ошибке.Я могу хранить эти сообщения на модели, но у меня все еще есть много if
, которые только вызывают исключение.Итак, каков наилучший способ выполнить такие проверки и сохранить мой API-интерфейс в чистоте?