getting
pysaundary opened this issue · comments
i am getting File "/home/ec2-user/New-Store/kavishalastore/My_kavi_store/lib64/python3.7/site-packages/oscarapi/serializers/fields.py", line 332, in to_internal_value
http_prefix = data.startswith(("http:", "https:"))
AttributeError: 'InMemoryUploadedFile' object has no attribute 'startswith' when i am trying to update user image
My update view.py
permission_classes=[IsAuthenticated,]
def get(self,request,slug):
user_id=request.user
try:
user=User.objects.get(slug=slug)
serializer=UserImageUpdateSerializer(user)
data={
"data":serializer.data,
"status":True
}
return Response(data,status=status.HTTP_200_OK)
except:
data={"msg":"slu or user is not valid","status":False}
return Response(data,status=status.HTTP_200_OK)
def put(self,request,slug):
data=request.data
try:
user=User.objects.get(slug=slug)
except:
data={
"msg":"slu or user is not valid",
"status":False
}
return Response(data,status=status.HTTP_200_OK)
serializer=UserImageUpdateSerializer(user,data=data,partial=True)
if serializer.is_valid():
serializer.save()
data={
"data":serializer.data,
"status":True,
}
return Response(data,status=status.HTTP_200_OK)
data={
"data":serializer.errors,
"status":False,
}
return Response(data,status=status.HTTP_200_OK)
My Model.py is
class User(AbstractUser):
email=models.CharField(unique=True,max_length=255)
username=models.CharField(max_length=50,blank=True,null=True)
provider=models.CharField(null=True,max_length=50)
phone=models.CharField(max_length=20,null=True,blank=True)
slug=models.CharField(max_length=250,null=True,blank=True)
def get_upload_path(instance,filename):
import os
return os.path.join(f"user_profile_pics/{instance.user.username}",filename)
user_image=models.ImageField(upload_to=get_upload_path, blank=True,null=True)
REQUIRED_FIELDS = ['first_name',]
@property
def token(self):
"""
Allows us to get a user's token by calling `user.token` instead of
`user.generate_jwt_token().
The `@property` decorator above makes this possible. `token` is called
a "dynamic property".
"""
return self._generate_jwt_token()
def get_full_name(self):
full_name = self.first_name
return full_name
def _generate_jwt_token(self):
"""
Generates a JSON Web Token that stores this user's ID and has an expiry
date set to 60 days into the future.
"""
dt = datetime.now() + timedelta(days=60)
tokenValue = {
"id":self.pk,
'exp': int(dt.timestamp()),
'username':self.slug,
}
try:
tokenValue['image']=self.image.url
except:
tokenValue['image']=None
token = jwt.encode(tokenValue, settings.SECRET_KEY, algorithm='HS256')
return token.decode('utf-8')
def save(self,*args, **kwargs):
if not self.username:
self.username=create_user_slug(self)
self.slug=f"{self.username}"
if not self.slug:
self.slug=create_user_slug(self)
super(User, self).save(*args, **kwargs)
and serializer.py is
class UserImageUpdateSerializer(serializers.ModelSerializer):
class Meta:
model=User
fields=('user_image',)
Hi @pysaundary
This is probably the same issue as #287
It has been fixed in version 3.1.2
Can you confirm / check if you have 3.1.2 installed?
@pysaundary A gentle reminder ^