Django用外键日期字段注解,但不包括过去的日期

n53p2ov0  于 2022-11-26  发布在  Go
关注(0)|答案(1)|浏览(141)

我想让Card模型的查询集用一个新的字段available_on来注解,这个字段应该被计算为相对Booking模型的字段removal_date的未来最近的日期。它应该只考虑未来的日期,我如何过滤掉过去的removal_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

我也希望它是在数据库端计算,如果可能的性能目的。谢谢

daolsyd0

daolsyd01#

您可以使用**filter=…参数[Django-doc]来过滤您在Min**聚合[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

相关问题