Django queryset注释过滤器(最大)

时间:2020-10-15 14:30:17

标签: django annotations django-queryset

我有以下模型:

class Room(models.Model):
    # model fields

class Table(models.Model):
    room = models.ForeignKey(
        Room, [...], related_name='tables'
    )

class Seat(models.Model):
    table = models.ForeignKey(
        Table, [...], related_name='seats'
    )
    timestamp = models.DateTimeField(auto_now_add=True)
    is_vip = models.BooleanField(default=False)

我想获得一张最近的座位的时间戳,上面有一张贵宾票。

像这样轻松获得最新席位:

Room.objects.all().annotate(latest_seat=Max('tables__seats__timestamp'))

但是我如何仅在is_vip = True上对此进行过滤?

1 个答案:

答案 0 :(得分:1)

您可以使用 Q() 表达式

from django.db.models import Q

Room.objects.annotate(
    latest_seat=Max(
        'tables__seats__timestamp',
        filter=Q(tables__seats__is_vip=True))
)