Я хочу создать 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. Так, невозможно сохранить данные изображения.