Фреймворк Django Rest — ввод значения FileField в ответ

#django #django-rest-framework #django-views

#django #django-rest-framework #django-просмотры

Вопрос:

в моем проекте Django Rest Framwork у меня есть следующее представление:

 class RegistrationView(APIView):

    def post(self, request, format=None):
        data = {}

        # check if email exists
        ...

        # check if username exists
        ...

        # at this point, we know everything is ok -> the serializer can do its work
        serializer = RegistrationSerializer(data = request.data)
        if serializer.is_valid():
            account = serializer.save()
            data['response'] = 'registered new user'
            data['id'] = account.id
            data['email'] = account.email
            data['username'] = account.username
            data['profile_pic'] = account.profile_pic     <--- HERE the problem occurs!!
            data['date_joined'] = account.date_joined
            token = Token.objects.get(user=account)
            data['token'] = token.key
        else:
            data = serializer.errors

        return Response(data)
  

Я попытался поместить результат процесса регистрации в data словарь, который затем возвращается в качестве ответа пользователю. Но в строке, где у меня есть data['profile_pic'] = account.profile_pic исключение, возникает сообщение об этом:

 UnicodeDecodeError: 'utf-8' codec can't decode byte 0x89 in position 0: invalid start byte
  

profile_pic Поле Account модели — это a FileField , как вы можете видеть в следующем:

 class Account(AbstractBaseUser):
    ...
    profile_pic = models.FileField(upload_to='Images/',default='Images/None/placeholder.jpg')
  

Как я могу получить значение FileField , которое в основном указывает на изображение профиля Account .

Комментарии:

1. Вы можете использовать URL-адрес, верно?

2. какой URL-адрес вы имеете в виду?

Ответ №1:

Использовать URL файлов:

 data['profile_pic'] = account.profile_pic.url