Группировать сериализованные данные в соответствии с определенным значением поля (фреймворк 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"
}
]
}
]
}