Не полный путь к изображениям MEDIA
Есть 2 класса которые использую, первый для вывода всех возможных достижений
class UserAchievementViewSet(ModelViewSet):
queryset = UserAchievement.objects.all().order_by('-id')
serializer_class = UserAchievementSerializer
permission_classes = (IsAdminUser, )
а второй для вывода достижений пользователя
class UserAchievementStatusListApiView(ListAPIView):
serializer_class = UserAchievementStatusSerializer
pagination_class = None
permission_classes = (IsAuthenticated,)
def get_queryset(self):
return UserAchievementStatus.objects.all()
def list(self, request, *args, **kwargs):
queryset = self.get_queryset().filter(user=request.user)
serializer = self.serializer_class(queryset, many=True)
return Response(serializer.data, status=status.HTTP_200_OK)
Вот 2 сериализатора:
class UserAchievementSerializer(serializers.ModelSerializer):
class Meta:
model = UserAchievement
fields = ('id', 'name', 'description', 'final_value', 'given_exp', 'image')
class UserAchievementStatusSerializer(serializers.ModelSerializer):
achievement = UserAchievementSerializer(read_only=True)
class Meta:
model = UserAchievementStatus
fields = ('achievement', 'progress_right_now', 'is_achieved')
Для ясности привожу модель
class UserAchievementStatus(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
achievement = models.ForeignKey(UserAchievement, on_delete=models.CASCADE)
progress_right_now = models.SmallIntegerField(default=0)
is_achieved = models.BooleanField(default=False)
И вот в чем ошибка, когда хочу получить атчивки юзера путь к img строится не совсем корректно
GET /api/get_user_achievements/
HTTP 200 OK
Allow: GET, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept
[
{
"achievement": {
"id": 9,
"name": "Тест1",
"description": "ну тест1",
"final_value": 1,
"given_exp": 12,
"image": "/media/users/achievements/achiv_WU6ONnk.jpg"
},
"progress_right_now": 0,
"is_achieved": false
},
{
"achievement": {
"id": 10,
"name": "Тест2",
"description": "ну тест2",
"final_value": 1,
"given_exp": 11,
"image": "/media/users/achievements/base_fmPUN1S.jpg"
},
"progress_right_now": 0,
"is_achieved": false
}
]
Хотя когда просто вывожу все достижения, путь к img верный
GET /api/achievements/
HTTP 200 OK
Allow: GET, POST, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept
{
"count": 2,
"next": "http://127.0.0.1:8000/api/achievements/?page=2",
"previous": null,
"results": [
{
"id": 10,
"name": "Тест2",
"description": "ну тест2",
"final_value": 1,
"given_exp": 11,
"image": "http://127.0.0.1:8000/media/users/achievements/base_fmPUN1S.jpg"
}
]
}
В чем может быть ошибка и как ее исправить?
Ошибка была в том, что при сериализации ответа я не указывал request в context вот как должно быть:
def list(self, request, *args, **kwargs):
queryset = self.get_queryset().filter(user=request.user)
filter_queryset = self.filter_queryset(queryset)
serializer = self.serializer_class(filter_queryset, many=True, context={'request': request})
return Response(serializer.data, status=status.HTTP_200_OK)