Django注释案例何时

问题描述

我有以下模型:

class Room(models.Model):
    # model fields

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

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

代码本身检查每个房间的preparation_time=None最多有一张桌子。始终是查询集中的.last()之一。

我想根据以下规则获取最新的时间戳:

1。)如果准备好会议室的所有表,请返回最新的preparation_time(会议室中最新表的preparation_time
2.)如果有一张不含preparation_time的桌子,请返回上面带有贵宾席位的最新时间戳。

我正在获得案例2的最新席位:

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

然后我尝试实施第一个规则,如下所示:

.annotate(
    last_activity=Case(
        When(~Exists(Q(tables__preparation_time__isnull=True)),then=Max('tables__seats__timestamp',filter=Q(tables__seats__is_vip=True))
        ),default=Table.objects.filter(room=OuterRef('id')).last().preparation_time,output_field=DateTimeField()
)

由于某种原因,该操作失败,因为我无法使用现有的Q查询

实现我的目标的最佳方法是什么?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)