我想用一个名为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
如果可能的话,我也希望在数据库端进行计算。谢谢
答案 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