我有一个名为Item的模型,与用户(“所有者”)具有m2m关系。django聚合聚合字段?
对于每一个项目,我需要算谁拥有它的用户。这是与注释()
很容易但后来我需要计算具体的性别和总所有者的所有者之间的比例计算每个项目。例如,如果2个男性拥有5个用户中的项目,则配给量为0.4。
这样做的最佳方法是什么?
我有一个名为Item的模型,与用户(“所有者”)具有m2m关系。django聚合聚合字段?
对于每一个项目,我需要算谁拥有它的用户。这是与注释()
很容易但后来我需要计算具体的性别和总所有者的所有者之间的比例计算每个项目。例如,如果2个男性拥有5个用户中的项目,则配给量为0.4。
这样做的最佳方法是什么?
要使用ORM做到这一点,你需要有条件的聚集,这是不是在Django支持。 http://www.voteruniverse.com/Members/jlantz/blog/conditional-aggregates-in-django提出了一个可能工作的hacky解决方案。
如果您不需要通过率进行排序,那么你可以让两个电话来注释,然后计算在Python中的比例。喜欢的东西:
items = Item.objects.annotate(ucount=Count('users')).annotate(ccount=CountIf(<condition>))
for item in items:
item.ratio = item.ucount/item.ccount
如果你不想这样做,我会建议使用额外的()方法和一些自定义的SQL得到你想要的额外的信息。该方法的文档位于Django Queryset API文档页面上。
只是在我的头顶,像下面这样可以工作。迭代就可以了,如果你希望得到您的完美解决方案:
items = Item.objects.annotate(Count('users'))
for item in items:
total = item.users__count
num_males = item.users.filter(gender='M').count()
num_females = item.users.filter(gender='F').count()
我想到的是第一,但它是在DB这么重来电:/ – 2009-11-27 14:43:37
如果以上可以以纯SQL与数据库比要求少做以上,然后用原始SQL或张贴在这里,这样的人可以找到相当于QuerySet。 – 2009-11-27 15:44:02