Django annotate Count不适用于多对多表

时间:2016-04-06 13:58:51

标签: django count many-to-many annotate

我有一个Django模型的层次结构(简化为基本要素):

项目/ models.py

class Project(models.Model):

    @property
    def material(self):
        return = m2m_Assembly_Components.objects.filter(assembly__room__project = self).aggregate(count=models.Count('component'))


class Room(models.Model):

    project = models.ForeignKey("Project", related_name="rooms")

class Assembly(models.Model):

    room = models.ForeignKey("Room", related_name="assemblies")
    components = models.ManyToManyField("material.Component", through="m2m_Assembly_Components")

class m2m_Assembly_Components(models.Model):

    component = models.ForeignKey("material.Component")
    assembly = models.ForeignKey("Assembly")

材料/ models.py

class Component(models.Model):

    name = models.CharField(max_length=200)

我想获取 m2m_Assembly_Components 中所有组件条目的列表,这些条目与某个项目及其编号相关。

类似于“项目1有7个A类组件和3个B类组件”

为此,我在项目类中使用材质属性,但我只获得 m2m_Assembly_Components 对象列表和计数值为1。

有人能给我一个提示我做错了吗?

编辑07.042016 12:11

我有点工作,但不是很好:

 @property
 def material(self):
     return = m2m_Assembly_Components.objects.filter(assembly__room__project = self).values('component__name','component__articlenumber').annotate(count=models.Count('component'))

不幸的是,这给了我一个dict而不是一个对象,我必须定义我需要的所有值:

{'component__articlenumber': '021123', 'count': 17, 'component__name': 'Abdeckrahmen, E2, anthrazit, 1-fach'}

0 个答案:

没有答案