我有一个定义TimeSlot的Django模型。每个TimeSlot可以容纳一定数量的用户(TimeSlot.spots
)。每个TimeSlot还有一定数量的用户(多个到多个字段,TimeSlot.participants
。
当我向用户传递显示可用TimeSlots的模板时,我使用TimeSlot.objects.annotate(Count('participants'))
进行注释,这会将TimeSlot当前持有的用户数量设为participants__count
。
然而,我真正想要的是剩余的点数,容量(TimeSlot.spots
)减去当前持有的数量(participants__count
)。如何使用这个新数字注释另一个字段,以便将其传递给模板?
答案 0 :(得分:2)
注释仍然无法实现(尽管计划在Django中实现)。但您可以使用.extra()
查询来执行此操作。有关详细信息,请参阅我的answer其他问题。
UPD:
基本上,你需要像这个查询一样的东西:
items = MyModel.objects.extra(
select = {'variance': 'Model.someField - SUM(relatedModel__someField)'},
)
答案 1 :(得分:1)
仅使用注释不可能。我在模型上创建了一个方法来执行注释,然后从TimeSlot.spots
值中减去该方法。这将使用更多的数据库查询,但这是您唯一的选择。或者我猜你可以下载到原始SQL ......