Обновление задачи django при изменении поля модели - PullRequest
0 голосов
/ 26 сентября 2019

У меня есть модель django, которая содержит детали того, когда конкретное задание (напоминание по электронной почте) должно быть запущено для определенного бронирования.

Это выглядит примерно так: -

class Task(models.Model):
    PENDING = 'pending'
    IN_PROGRESS = 'in_progress'
    COMPLETE = 'complete'
    STATES = (
        (PENDING, 'Pending'),
        (IN_PROGRESS, 'In Progress'),
        (COMPLETE, 'Complete')
    )

    run_at = models.DateTimeField()
    state = models.CharField(max_length=50, choices=STATES, default=PENDING)

    class Meta:
        ordering = ['run_at']

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

Насколько я вижу, есть несколько способов сделать это: -

  1. В коде представления.
  2. В методе сохранения модели Task.
  3. Использование сигналов.

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

Кроме того, если кто-то еще добавит код, который изменяет даты бронирования, он должен знать об этом, чтобы обновить задания.

Так что имеет ли смысл использовать метод сохранения?Или просто постарайтесь как можно тщательнее найти все места, где можно изменить дату бронирования?

1 Ответ

0 голосов
/ 26 сентября 2019

Сигналы предназначены для таких задач, и в вашем случае я считаю, что использование сигналов - лучший путь.

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

Переопределение метода сохранения модели Task также является жизнеспособным решением, но, поскольку сигналы предназначены для таких задач, было бы лучше использовать код в стиле кода.,

...