Django注释的数学运算

时间:2010-07-01 04:45:26

标签: django django-models django-templates

我有一个定义TimeSlot的Django模型。每个TimeSlot可以容纳一定数量的用户(TimeSlot.spots)。每个TimeSlot还有一定数量的用户(多个到多个字段,TimeSlot.participants

当我向用户传递显示可用TimeSlots的模板时,我使用TimeSlot.objects.annotate(Count('participants'))进行注释,这会将TimeSlot当前持有的用户数量设为participants__count

然而,我真正想要的是剩余的点数,容量(TimeSlot.spots)减去当前持有的数量(participants__count)。如何使用这个新数字注释另一个字段,以便将其传递给模板?

2 个答案:

答案 0 :(得分:2)

注释仍然无法实现(尽管计划在Django中实现)。但您可以使用.extra()查询来执行此操作。有关详细信息,请参阅我的answer其他问题。

UPD:

基本上,你需要像这个查询一样的东西:

items = MyModel.objects.extra(
    select = {'variance': 'Model.someField - SUM(relatedModel__someField)'},
)

答案 1 :(得分:1)

仅使用注释不可能。我在模型上创建了一个方法来执行注释,然后从TimeSlot.spots值中减去该方法。这将使用更多的数据库查询,但这是您唯一的选择。或者我猜你可以下载到原始SQL ......