Django通过外键的日期字段注释,但排除过去的日期

时间:2020-06-09 20:46:46

标签: django django-models

我想用一个名为available_on的新字段注释我的Card模型的查询集,该字段应计算为相对Booking模型字段removal_date的将来的最近日期。它应该只考虑将来的日期,如何过滤掉过去的date_date?我现在拥有的是这个。

def with_available_on(self):
        qs = self.annotate(available_on=Case(
            When(bookings_count__gt=0, slots_available__lt=1, then=Min('bookings__removal_date')),
            default=None)
        )
        return qs

如果可能的话,我也希望在数据库端进行计算。谢谢

1 个答案:

答案 0 :(得分:1)

您可以使用filter=… parameter [Django-doc]来过滤在Min aggregate [Django-doc]中跨越聚合的对象:

from django.db.models import Q
from django.db.models.functions import Now

def with_available_on(self):
        qs = self.annotate(available_on=Case(
            When(
                bookings_count__gt=0, slots_available__lt=1,
                then=Min(
                    'bookings__removal_date',
                    filter=Q(bookings__remval_date__gte=Now())
                )
            ),
            default=None)
        )
        return qs