我有以下模型:
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上对此进行过滤?
答案 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))
)