Django queryset分组

时间:2018-12-04 10:30:46

标签: django django-queryset

说我有这些伪模型

class Client(models.Model
    name = ...

class Property(models.Model):
    client = models.ForeignKey(Client ...)
    name = ...
    type = ...
    value = ...

例如,我有2个客户。每个都有2个属性记录。两个客户端可能拥有相同的属性,但是具有唯一的属性记录,因为每个客户端可能拥有属性(值)的不同部分。

如何产生结果,使其返回类似以下内容的结果:

属性A,{clientA,值},{clientB,值}

属性B,{clientA,值}

根据属性的名称和类型将属性分组的地方?

非常感谢


iodb您是否建议这样?

class Client(models.Model
    name = ...

class Property(models.Model):
    name = ...
    type = ...

class PropertyValue(models.Model):
    client = models.ForeignKey(Client ...)
    property = models.ForeignKey(Property ...)
    value = models.IntegerField(...)

1 个答案:

答案 0 :(得分:3)

您的模型似乎不适合您要存储的数据和想要获得的结果。您需要拆分属性和值,以便在Property和Client之间以PropertyValue作为中间类存在多对多关系。

class Client(models.Model):
    name = ...
    properties = models.ManyToManyField('Property', through='PropertyValue')

class PropertyValue(models.Model):
    client = models.ForeignKey('Client' ...)
    property = models.ForeignKey('Property'...)
    value = ...

class Property(models.Model):
    name = ...
    type = ...

现在,您可以遍历“属性”,并为每个输出的每个客户端提供值:

{% for property in properties %}
    {{ property.name }}
    {% for value in property.propertyvalue_set.all %}
        {{ value.client.name }}
        {{ value.value }}
    {% endfor %}
{% endfor %}