Django rest, загрузить изображение с типом BinaryField типа throw Бит объекта TypeError не может быть интерпретирован как целое число - PullRequest
0 голосов
/ 09 июля 2019

я устанавливаю поле с BinaryField, когда я отправляю, сервер, выбрасывающий объект 'bytes' TypeError, не может быть интерпретирован как целое число

с использованием угловых 7 и django rest 3.9, MySQL 5.7, я хотел проверитьBinaryField.я создал пользовательскую модель с аватаром в виде двоичного поля.

class User(AbstractBaseUser, PermissionsMixin):

    email = models.EmailField(max_length=255, unique=True)
    firstname = models.CharField(max_length=255)
    surname = models.CharField(max_length=255,null=True, default=None)
    name = models.CharField(max_length=255, null=True, default=None)
    avatar = models.BinaryField(null=True)

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = get_user_model()
        fields = '__all__'

class CreateUserView(APIView):
    permission_classes = (IsAuthenticated, )

    def post(self, request, format=None):

        print('request data:', request.data)

        serializer = UserSerializer(request.data)
        if serializer.is_valid():
            #user object returned
            user = serializer.save()
            return Response(serializer.data, status=status.HTTP_201_CREATED)

сервер регистрирует данные запроса:

request data:
 <QueryDict:{ 'email': ['binary4@vimmoda.com'], 'password': ['admin'], 
  'confirmPassword': ['admin'], 'initials': ['b4'], 'avatar': 
  [<InMemoryUploadedFile: test.png (image/png)>]}>

ожидаемый результат: пользователь сохранил и сохранил свое изображение в двоичном видеданные, но фактический результат: TypeError - объект 'bytes' не может быть интерпретирован как целое число

1 Ответ

0 голосов
/ 09 июля 2019

Вы используете MultiPartParser для сериализации данных формы. Попробуйте код ниже

from rest_framework import parsers

class CreateUserView(APIView):
    permission_classes = (IsAuthenticated, )
    parser_classes = (parsers.MultiPartParser)
    # your code
...