Лучший способ запланировать задачи на даты - PullRequest
0 голосов
/ 31 октября 2019

Рассмотрим сценарий, в котором у меня есть следующее:
- Пользователи
- Полномочия
- Допустимые

В моей модели Power я дал суперпользователю возможность создавать собственные полномочия. и среди этих вариантов создания власти есть поле, в котором они могут выбрать дату приемлемости, когда эти полномочия доступны для User и «количество», сколько раз они могут использовать в месяц. Это довольно просто, но у меня также есть другая модель под названием Eligible, которая выглядит следующим образом:

class Eligible(models.Model):
    user = models.ForeignKey(User, on_delete=blahblah)
    power = models.ForeignKey(Power)
    eligible = models.BooleanField()
    balance = models.DecimalField(max_digits=8, decimal_places=2)

Когда я создаю пользователя, связываю Power с этим объектом пользователя, если они сразу имеют право, объект этого пользователя для Власти в модели Eligible создан, и для поля eligible установлено значение true, а сумма добавляется к его балансу, если они не соответствуют критериям, для него устанавливается значение false, а затем я хочусоздать задачу, которая автоматически обновляет свой баланс каждый месяц.

  • Запланировать задачу для каждого объекта на определенную дату?
  • Запускать задачу каждые 24 часа, повторяя все недопустимыеПользователи и делают ли они их приемлемыми, если дата соответствует дате приемлемости?

Если да, то как мне это сделать?

Спасибо за ваше время. Я старался изо всех сил, чтобы написать это, как трезвый человек.

1 Ответ

1 голос
/ 31 октября 2019

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

Например, если модель Power выглядит следующим образом:

class Power(models.Model):
    <b>activate = models.DateTimeField()</b>

Тогда мы можем реализовать логику, такую ​​как:

from django.utils.timezone import <b>now</b>

class Eligible(models.Model):
    user = models.ForeignKey(User, on_delete=&hellip;)
    power = models.ForeignKey(Power, on_delet=&hellip;)
    <b>immediately_eligible</b> = models.BooleanField()

    @property
    def is_eligible(self):
        return self.immediately_eligible <b>or now() >= self.power.activate</b>

Таким образом, свойство is_eligible будет True, если immediately_eligible установлено в True, или отметка времени будет позже (или равнак) self.power.activate.

...