annotate для отсутствующего ключа группировки
Есть модели:
class Deviation(models.Model):
class DeviationType(models.TextChoices):
TYPE1 = 'type1',
TYPE2 = 'type2'
COMMON = 'common'
type = models.CharField(
_('deviation type'),
choices=DeviationType.choices,
max_length=25,
default=DeviationType.COMMON,
)
class Task(models.Model):
name = models.CharField()
deviation = models.ForeignKey(Deviation)
Есть ORM-запрос:
res = Task.objects.values('deviation__type')\
.annotate(type=F('deviation__type'), count=Count('pk'))\
.values('type', 'count')
Из запроса можно видеть, что цель запроса - посчитать количество Task, сгруппировав по deviation__type.
С чем заключается вопрос. Можно догадаться, что если нет ни одной Task-и с каким-то определенным type, скажем, COMMON, то в res его и не будет, то есть:
[
{
"type": "type1",
"count": 9
},
{
"type": "type2",
"count": 10
}
]
Можно ли переделать ORM-запрос так, чтобы вместо отсутствия подобных type в результате, они там были, а count был бы 0:
[
{
"type": "losses",
"count": 9
},
{
"type": "personnel",
"count": 10
},
{
"type": "common",
"count": 0
}
]
?