问题描述
我有以下模型:
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 (将#修改为@)