使用子查询汇总注释结果以注释模型

时间:2018-10-28 17:34:08

标签: django django-models django-orm

我正在开发一个众包引擎,其中每个 Task 可以包含多个项目。每个 Item 可以有多个 Annotation -每个 User 中都有一个。

我还为 Package 创建了模型,该模型可以存储多个任务中的项目。所有包装的商品数量均相同。

class Package(models.Model):
    items = SortedManyToManyField(Item)

class Item(models.Model):
    task = models.ForeignKey(Task)

class Annotation(models.Model):
    item = models.ForeignKey(Item)
    user = models.ForeignKey(User)

我想根据有多少用户完成了某个程序包中的所有项目对程序包进行排序。

我试图:

  1. 按(“ packages”,“ packages__items__annotations__user”)对对包进行分组
  2. 然后使用注释功能来实现用户在特定程序包中完成的注释计数
  3. 之后,我将其除以包装中的物品数量,并将其命名为“ full_annotations”。

但是我不知道现在如何用此“包”中所有“ full_annotations”的总和来注释“包”。

我当前的代码:

 items_in_package = 2 
 mission.packages.values (
     "packages", "packages__items__annotations__user"
 ).annotate(
     full_annotations=Sum('packages__items__annotations__user')/items_in_package
 ).values(
     "packages", "full_annotations"
 )
  

QuerySet [{'packages':1,'full_annotations':1},{'packages':1,'full_annotations':2},{'packages':2,'full_annotations':1},{'packages ':2,'full_annotations':2},{'packages':2,2,'full_annotations':1},{'packages':2,'full_annotations':2},{'packages':3,'full_annotations': 0},{'packages':3,'full_annotations':None}]

例如,对于上面的结果,我想要得到:

  

QuerySet [{'packages':1,'total_annotations':2},{'packages':2,'total_annotations':2},{'packages':3,'total_annotations':0}]

其中“ total_annotations”是每个“ packages”值中所有“ total_annotations”的总和。

我设法通过带有子查询的SQL查询来做到这一点,但是我需要一个QuerySet结果。

0 个答案:

没有答案