我正在做一个项目,需要我上传一张图片。但是,当我试图上传一张,并张贴我妈得到上述错误。我不知道该怎么做了。
我已经尝试过使用FileUploadParser并创建类Base64ImageField了。请帮助。
模型
class UserProfile(models.Model):
user = models.OneToOneField(User,on_delete=models.CASCADE, default=None, null=True)
avatar = models.ImageField(upload_to='', blank=True, null=True)
code = models.CharField(max_length=8, unique=True, default=unique_rand)
emailVerified = models.NullBooleanField(null=True, default=None)
facebookId = models.CharField( null=True,unique=True, default=None,max_length=255)
googleId = models.CharField(null=True,unique=True,default=None,max_length=255)
phone_regex = RegexValidator(regex=r'^\+?1?\d{9,15}$')
mobile = models.CharField(validators=[phone_regex, MinLengthValidator(10)], max_length=10, null=True, default=None)
mobileVerified = models.NullBooleanField(null=True,default=None)
status = models.BooleanField(default=False)
字符串
串行器
class UserProfileSerializer(serializers.ModelSerializer):
user = UserSerializer()
avatar = Base64ImageField(required=False)
code = serializers.CharField(read_only=True)
serializers.FileField(use_url=False)
class Meta:
model = UserProfile
fields = '__all__'
extra_kwargs = {'user': {'required': False}}
def create(self, validated_data):
user_data = validated_data.pop('user')
user = User.objects.create(**user_data)
image = validated_data.pop('avatar')
upr=UserProfile.objects.create(user=user,image=image,**validated_data)
return upr
型
查看
class UserCreate(generics.ListCreateAPIView):
serializer_class = UserProfileSerializer
user_serializer = UserSerializer
queryset = UserProfile.objects.all()
parser_classes = (FormParser,MultiPartParser)
def pre_save(self, request):
request.avatar = self.request.FILES.get('file')
def post(self, request):
print(request.data)
serializer= UserProfileSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
型
2条答案
按热度按时间ny6fqffe1#
也许可以尝试使用“multipart form”而不是JSON作为你的POST负载类型。对于值(我使用的是Inbox),选择右边的“文件”而不是“文本”。然后上传一个文件。这对我来说很有效,不确定是否是同样的问题。希望有帮助!
这里有一篇文章,有你正在寻找的答案。
Posting a File and Associated Data to a RESTful WebService preferably as JSON
hujrc8aj2#
一切看起来都很好,我正在做一个项目,遇到了这个问题。这个线程是旧的,但我会回答无论如何。
我相信你在POSTMAN中传递的数据是JSON。你只需要在你的
parser_classes
中添加JSONParser
。所以更新后的
parser_classes
将是:字符串
希望它能解决你的问题。祝你今天愉快!