Django Queryset: получить максимальное количество элементов M2M по категории M2M - PullRequest
0 голосов
/ 27 марта 2020

Я работаю над проблемой набора запросов. Вот мои модели:

class AssetCategory(models.Model):
    name = models.CharField('Category name', max_length=255)

class Asset(models.Model):
    name = models.CharField('Asset name', max_length=255)
    category = models.ForeignKey(AssetCategory, on_delete=models.SET_NULL)

class Product(models.Model):
    name = models.CharField('Product name', max_length=255)
    assets = models.ManyToManyField(Asset, related_name='products')

Я бы хотел получить список категорий с максимальным количеством активов, которыми обладает продукт (каким бы ни был этот продукт)

Например, если у меня есть:

Продукт 1:

  • 2 актива в категории A
  • 1 актив в категории B

Продукт 2:

  • 5 активов в категории A
  • 0 активов в категории B

Я хотел бы знать, что:

  • категория A во всех моих продуктах получает максимум 5 активов
  • категория B во всех моих продуктах получает максимум из 1 актива

Я пытался играть с агрегатом или аннотацией на разных столах, но мне не удалось получить то, что я хотел ..

Самым близким, что я пытался, было :

asset_categories = AssetCategory.objects.annotate(max_in_product=Count('asset__products'))

Но, конечно, он дает мне для каждой категории сумму активов, использованных в моих продуктах, поэтому в моем примере:

  • Категория A: 7
  • Cat Егори Б: 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...