Невозможно получить данные изображения в запросе API вместе с json данными для регистрации - PullRequest
0 голосов
/ 19 февраля 2020

Я хочу создать API регистра, в котором у меня есть имя пользователя, адрес электронной почты, пароль и поле изображения. Я не могу правильно получать и обрабатывать данные. Класс пользователя по умолчанию расширен для хранения поля изображения. У меня есть этот расширенный пользователь модель : -

from django.contrib.auth.models import User
import os
def get_upload_path(instance, filename):
    fileName, fileExtension = os.path.splitext(filename)
    return os.path.join("user_%s" % instance.user.username,"user_{0}.{1}" .format(instance.user.username,fileExtension))

# Create your models here.
class Userprofile(models.Model):
    user=models.OneToOneField(User,on_delete=models.CASCADE)
    display_picture=models.ImageField(upload_to=get_upload_path)
    has_voted=models.BooleanField(default=False)
    voted_item=models.CharField(max_length=200,default='none')
    def __str__(self):
        return self.user.username

Это сериализаторы : -

from rest_framework import serializers
from rest_framework.validators import UniqueValidator
from django.contrib.auth.models import User  
class UserprofileSerializer(serializers.ModelSerializer):
    display_picture = serializers.ImageField(required=True)
    def create(self, validated_data):
        user = Userprofile.objects.create(validated_data['display_picture'])
        return user
    class Meta:
        model=Userprofile
        fields=['display_picture']

class UserSerializer(serializers.ModelSerializer):
    email = serializers.EmailField(
            required=True,
            validators=[UniqueValidator(queryset=User.objects.all())]
            )
    username = serializers.CharField(
            required=True,
            validators=[UniqueValidator(queryset=User.objects.all())]
            )
    password = serializers.CharField(min_length=8,required=True)

    def create(self, validated_data):
        user = User.objects.create_user(validated_data['username'], validated_data['email'],
             validated_data['password'])
        return user

    class Meta:
        model = User
        fields = ('username', 'email', 'password')  

это путь / URL : -

path('register',views.FileUploadView.as_view(),name='Register'),

Представление : -

@method_decorator(csrf_exempt,name='dispatch')
@parser_classes((MultiPartParser,FormParser))
class FileUploadView(APIView):
    def post(self, request):
        display_picture=request.FILES['display_picture']
        #print(display_picture)
        serializer = UserSerializer(data=json.loads(request.data['data']))
        serializers2=UserprofileSerializer(data=display_picture)
        print(str(serializer.is_valid()) +" and "+ str(serializers2.is_valid()))
        if serializer.is_valid() and serializers2.is_valid():
            serializer.save()
            serializers2.save()
            return JsonResponse({'message': "Registered Successfully!"},status=201)
        return JsonResponse(serializer.errors,status=400)

В представлении serializers2.is_valid () имеет значение false. Так, невозможно сохранить данные изображения.

...