Я пытаюсь добавить Framework к моим Django моделям, которые позволят экземплярам моей модели истечь. У меня будет временное задание, которое будет проходить через истекающие модели и удалять экземпляры с истекшим сроком действия.
У меня есть разные типы истечений, которые я хочу выполнить. Первым из них является базовый c TimeDeltaExpiry, который истекает экземпляры после timedelta с момента последнего сохранения экземпляра. Истечение срока действия обновляется при сохранении экземпляра.
def save(self, *args, **kwargs):
self.expiry = self.expiry.datetime + timedelta(minutes=2)
super(TimeDeltaExpiry, self).save()
Вторым является RefreshableTimeDeltaExpiry, который должен обновляться при каждом запросе экземпляра. Не уверен, что это вообще возможно, но я искал метод или функцию, которая позволила бы мне захватывать при обращении к экземпляру. Также существует опасение, что при выполнении моей задачи очистки она также будет ссылаться на экземпляр и обновит срок действия, что я, конечно, не хотел бы, чтобы это произошло.
Есть ли метод, который мог бы позволить мне делать то, что я хочу?
Вот мой пока непроверенный код
class ExpiryManager(models.Manager):
def get_queryset(self):
return super().get_queryset().annotate(
expired=ExpressionWrapper(Q(expiry__lt=Now()), output_field=BooleanField())
)
class ExpiryBase(models.Model):
expiry = models.DateTimeField()
objects = ExpiryManager()
class Meta:
abstract = True
class TimeDeltaExpiry(ExpiryBase):
def save(self, *args, **kwargs):
self.expiry = self.expiry.datetime + timedelta(minutes=2)
super(TimeDeltaExpiry, self).save()
class Meta:
abstract = True
class RefreshableTimeDeltaExpiry(TimeDeltaExpiry):
class Meta:
abstract = True