Доступ к данным URL в классе сериализаторов в Django Rest Framework
Я получаю None
при доступе к данным запроса.
- views.py
def get(self, request, post_id, post_language_id, user_id):
...
paginator = CustomPageNumberPagination()
response = paginator.generate_response(language_liked_data, PostLanguageLikedSerializer, request)
return response
но мне нужен user_id из URL, поэтому я нашел способ доступа к данным через context
. так я могу получить доступ к значению в сериализаторе.
- views.py
def get(self, request, post_id, post_language_id, user_id):
...
language_liked_data = PostLanguageLike.objects.filter(post_language_id=post_in_lang.id)
post_language_like_serializer = PostLanguageLikedSerializer(language_liked_data, context={'user_id': user_id}, many=True)
return Response({"response": True, "return_code": "success", "result": {"liked_users": post_language_like_serializer.data}, "message": success["success"]}, status=200)
- serializers.py
class PostLanguageLikedSerializer(serializers.ModelSerializer):
is_following = serializers.SerializerMethodField()
...
class Meta:
model = PostLanguageLike
fields = [...,'is_following']
def get_is_following(self, obj):
# here I want to access URL data.
user_id = self.context.get("user_id")
user_followings = UserFollowing.objects.filter(user_id=user_id, following_user_id=obj.user.id)
is_following = True if len(user_followings) > 0 else False
return is_following
проблема в том, что я не могу использовать context={'user_id': user_id}
с paginator.generate_response
.
есть ли лучший способ получить данные URL в сериализаторе?
Я получил ответ, как возможно получить context
данные в сериализаторах .
- views.py
paginator = CustomPageNumberPagination()
page = paginator.paginate_queryset(language_liked_data, request)
serializer = PostLanguageLikedSerializer(page, context={'user_id': user_id}, many=True)
response = paginator.get_paginated_response(serializer.data)
return response
- paginator.py
def get_paginated_response(self, data):
# customize your response here "data" = "serializer.data"
return Response({
'links': {
'next': self.get_next_link(),
'previous': self.get_previous_link()
},
'count': self.page.paginator.count,
'results': data
})
- serializers.py
class PostLanguageLikedSerializer(serializers.ModelSerializer):
is_following = serializers.SerializerMethodField()
...
class Meta:
model = PostLanguageLike
fields = [...,'is_following']
def get_is_following(self, obj):
# got context data here
user_id = self.context.get("user_id")
user_followings = UserFollowing.objects.filter(user_id=user_id, following_user_id=obj.user.id)
is_following = True if len(user_followings) > 0 else False
return is_following