Подсчет отличий в агрегированном измерении

У меня следующая модель:

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, но все они оказались неудачными.

Вернуться на верх