Я работаю над проблемой набора запросов. Вот мои модели:
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