Существует ли способ форматирования сериализованного ответа для групп и их разрешений в Django Rest Framework?

Я создал конечную точку API, в которую я отправляю данные JSON. для создания группы, а затем назначил разрешения моделям (например, add_user, change_user и т.д.) программно.

Все работает нормально.

Теперь проблема в том, что я хочу отформатировать полученные данные в том же формате, в котором я их отправил

Это для встроенных в Django Group, Permissions, ContentType

View.py

class RolePermissionListCreateAPIView(generics.ListCreateAPIView):
    
    queryset = Group.objects.all()
    serializer_class = RolePermissionSerializer
    permission_classes = (IsAuthenticated,)


    def list(self, request):
        if not request.user.has_perm("auth.view_group"):
            return Response({"error":"Permission denied."}, status=status.HTTP_401_UNAUTHORIZED)

        queryset = self.get_queryset()
        serializer = RolePermissionSerializer(queryset, many=True)
        return Response(serializer.data)

Serializer.py

class PermissionSerializer(serializers.ModelSerializer):
    codename = serializers.CharField(allow_blank=False)
    class Meta:
        model = Permission
        fields ="__all__"

class RolePermissionSerializer(serializers.ModelSerializer):
    name = CharField(max_length=100)
    permissions = PermissionSerializer(many=True)
    class Meta:
        model = Group
        fields = ["id", "name", "permissions"]

Data

[
    {
        "id": 1,
        "name": "Administrator",
        "permissions": [
            {
                "codename": "add_user"
            },
            {
                "codename": "change_user"
            },
            {
                "codename": "deactivate_user"
            },
            {
                "codename": "delete_user"
            },
            {
                "codename": "export_user"
            },
            {
                "codename": "import_user"
            },
            {
                "codename": "print_user"
            },
            {
                "codename": "view_user"
            }
            
        ]
    }
]

На самом деле я хочу, чтобы данные были отформатированы следующим образом:

{
    "role_name": "Administrator",
    "modules": [
        {
        "module_name": "User",
        "can_view": "True",
        "can_add": "True",
        "can_edit": "True",
        "can_delete": "True",
        "can_print": "True",
        "can_deactivate": "True",
        "can_import": "True",
        "can_export": "True"
        }
]
}

Пожалуйста, любая помощь и предложения будут очень кстати.

В Serializer есть метод под названием to_represetation, который вы можете переопределить Response

def to_representation(self, instance):
    response = super().to_representation(instance)
    # response is the dictionary you can overwrite it accordingly

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