Фильтр Django моделей на основе сравнения дат - PullRequest
0 голосов
/ 17 февраля 2020

У меня есть модели подписки с атрибутом end_date.

class Subscription(models.Model):
    client = models.OneToOneField(ClientProfile, on_delete=models.CASCADE)
    trainer = models.ForeignKey(TrainerProfile, null=True, blank=True,
        on_delete=models.SET_NULL, limit_choices_to={'is_staff': True})
    plan = models.ForeignKey(Plan, on_delete=models.CASCADE)
    transaction = models.OneToOneField(PaymentHistory, on_delete=models.CASCADE)
    start_date = models.DateTimeField()
    end_date = models.DateTimeField()

Я хочу отправить электронное письмо пользователю, имеющему подписку, чтобы один раз уведомить:

(subscription.end_date - timezone.now()).days < 3

Как бы я фильтровать данные из django на основе этого типа сравнения в filter (), а не читать все объекты подписки в памяти.

1 Ответ

2 голосов
/ 17 февраля 2020

Во-первых, вы можете найти через 3 дня. После вы можете использовать end_date__lte param. Вот так:

comparing_date =  datetime.datetime.today() + datetime.timedelta(days=3)
subscriptions =  Subscription.objects.filter(end_date__lte=comparing_date)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...