我正在开发一个众包引擎,其中每个 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)
我想根据有多少用户完成了某个程序包中的所有项目对程序包进行排序。
我试图:
但是我不知道现在如何用此“包”中所有“ 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结果。