Джанго группировка запросов - PullRequest
0 голосов
/ 04 декабря 2018

Скажем, у меня есть эти псевдо-модели

class Client(models.Model
    name = ...

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

Например, у меня есть 2 клиента.У каждого есть 2 записи собственности.2 клиента могут владеть одним и тем же свойством, но иметь уникальные записи свойств, поскольку каждому клиенту может принадлежать отдельная часть свойства (значения).

Как я могу получить результаты, которые возвращают что-то вроде:

propertyA, {clientA, value}, {clientB, value}

propertyB, {clientA, value}

, где свойство сгруппировано по имени и типусобственность?

Большое спасибо


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 голосов
/ 04 декабря 2018

Ваши модели не подходят для данных, которые вы хотите сохранить, и результата, который вы хотите получить.Вам нужно разделить свойство и значение так, чтобы между 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 %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...