Группировать сериализованные данные в соответствии с определенным значением поля (фреймворк Django rest)

models.py

class InviteUser(models.Model):

invite_id = models.AutoField(primary_key=True)
invite_code = models.CharField(max_length=100, unique=True)
invite_type = models.CharField(max_length=100)
invited_user_role = models.CharField(max_length=100)
invited_user = models.ForeignKey('users.User', on_delete=models.CASCADE, db_column='invited_user')
number_of_invites = models.PositiveIntegerField(null=True, blank=True)
invite_expiry_date = models.CharField(max_length=100, null=True, blank=True)
remaining_invites = models.PositiveIntegerField(null=True, blank=True)
phone_number = models.CharField(max_length=15, null=True, blank=True)

veiws.py

class GetAllInvitesCreatedByOneUser(generics.RetrieveAPIView):

def get(self, request, *args, **kwargs):
    user_id = self.kwargs['user_id']
    user_invite_instance = InviteUser.objects.filter(Q(invited_user=user_id) & (Q(invite_type='MEMBER') | Q(invite_type='SELLER')))
    serializer = GetAllInvitesCreatedByOneUserSerializer(user_invite_instance, many=True)
    return Response({"message": "success", "invited_user": user_id, "data": serializer.data}, status=status.HTTP_200_OK)

serializers.py

class GetAllInvitesCreatedByOneUserSerializer(serializers.ModelSerializer):

class Meta:
    model = InviteUser
    fields = ['invite_code', 'invite_type', 'phone_number']

Приведенный выше код дает результат:

{
"message": "success",
"invited_user": 77,
"data": [
    {
        "invite_code": "M-ASWA-6721",
        "invite_type": "MEMBER",
        "phone_number": "9387907555"
    },
    {
        "invite_code": "M-ASWA-3289",
        "invite_type": "MEMBER",
        "phone_number": "9999907772"
    },
    {
        "invite_code": "S-ASWA-6411",
        "invite_type": "SELLER",
        "phone_number": "8099907772"
    }
]
}

Я хочу, чтобы это было сгруппировано по полю invite_type:

   "message": "success",
   "invited_user": 77,
   "data": [
      {
         "MEMBER": [
            {
               "invite_code": "M-ASWA-6721",
               "invite_type": "MEMBER",
               "phone_number": "9387907997"
            },
            {
               "invite_code": "M-ASWA-3289",
               "invite_type": "MEMBER",
               "phone_number": "9999907772"
            }
         ],
         "SELLER": [
            {
               "invite_code": "S-ASWA-6411",
               "invite_type": "SELLER",
               "phone_number": "8099907772"
            }
         ]
      }
   ]
}
Вернуться на верх