gpt4 book ai didi

python - 是否可以对 OuterRef 表达式进行算术运算?

转载 作者:太空宇宙 更新时间:2023-11-04 02:34:37 24 4
gpt4 key购买 nike

我正在用 django 构建一个体验预订系统,我有以下模型。

class Experience(models.Model):
name = models.CharField(max_length=20)
capacity = models.IntegerField()

class Booking(models.Model):
experience = models.ForeignKey(Experience)
occupied = models.IntegerField()

每个体验都有名额限制,当用户进行预约时,会以已占用的人数添加到预约表中。现在我如何找到没有被完全占用的体验?

available_experiences = Experience.objects.all().exclude(id__in=Subquery(Booking.objects.filter(occupied__gt=OuterRef('capacity') - request_persons).values_list('experience', flat=True)))

此处,request_persons 是体验中所需的空缺人数。这不起作用并显示错误,例如 'ResolvedOuterRef' object has no attribute 'relabeled_clone'。是否可以像 F() 这样对 OutRef() 表达式进行算术运算?

在不添加 request_persons 的情况下,上面的代码有效。为什么不能向 OutRef() 表达式添加值?

注意:我的实际代码非常复杂,在不修改上述代码的整个结构的情况下获得答案真的很棒。

最佳答案

通过在 OuterRef() 引用的查询中直接执行算术运算,您可以解决此问题:

available_experiences = Experience.objects.annotate(
total=models.F('capacity') - request_persons
).exclude(
id__in=Subquery(Booking.objects.filter(
occupied__gt=OuterRef('total')
).values_list('experience', flat=True))
)

如果您在不修改结构或使用 RawSQL().extra() 的情况下找到了另一种方法,请告诉我们!

关于python - 是否可以对 OuterRef 表达式进行算术运算?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48230771/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com