微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Django注释案例何时

如何解决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 举报,一经查实,本站将立刻删除。