Подсчет отличий в агрегированном измерении
У меня следующая модель:
class Historique(models.Model):
type_of_object_choices = (
(1, 'Cadeau')
, (2, 'Offre')
, (3, 'Commentaire')
)
event_type_choices = (
(1, 'modification')
, (2, 'creation')
, (4, 'suppression')
)
wishlist = models.ForeignKey(Wishlist, on_delete=models.CASCADE)
type_of_object = models.IntegerField(choices=type_of_object_choices, null=True)
event_type = models.IntegerField(choices=event_type_choices)
object_pk = models.IntegerField()
Как выразить на языке «Django» следующий SQL-запрос?
SELECT
type_object
, CASE
WHEN sum_event_type in (1) THEN 'modification'
WHEN sum_event_type in (2, 3) THEN 'creation'
WHEN sum_event_type in (4, 6) THEN 'supression'
END as type_of_action
, COUNT(DISTINCT object_pk) as nb_objects
FROM
(
SELECT
type_object
, object_pk
, sum(event_type) as sum_event_type
FROM wishlist_historique
GROUP BY type_object, object_pk
) as temp
GROUP BY type_object
, CASE
WHEN sum_event_type in (1) THEN 'modification'
WHEN sum_event_type in (2, 3) THEN 'creation'
WHEN sum_event_type in (4, 6) THEN 'supression'
END
Я пробовал различные решения на основе annotate и aggregate, но все они оказались неудачными.