Существует ли способ форматирования сериализованного ответа для групп и их разрешений в 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