在DRF中获取图片的绝对路径
我最近在学习DRF(Django REST框架),想要创建一个系统来返回用户的信息。在这些信息中,有一个用户头像,它应该返回保存照片的URL链接。问题是,我得到的是一个相对路径,而不是绝对路径。下面我附上了我应用的代码。
models.py
def get_upload_path(instance, filename):
return os.path.join('images' , 'avatar' , str(instance.pk),filename)
class CustomUser(AbstractUser):
username = models.CharField(max_length=50, unique=True)
email = models.EmailField(_('email address'), unique=True)
name = models.CharField(max_length=50)
surname = models.CharField(max_length=50)
avatar = models.ImageField(upload_to=get_upload_path, blank=True, null=True,)
is_active = models.BooleanField(default=True)
is_verified = models.BooleanField(default=False)
date_joined = models.DateTimeField(_('date joined'), auto_now_add=True)
last_login = models.DateTimeField(_('last login'), auto_now=True)
USERNAME_FIELD = 'username'
REQUIRED_FIELDS = ['email']
def __str__(self):
return self.username
serializers.py
class CustomUserSerializer(serializers.ModelSerializer):
class Meta:
model = CustomUser
fields = ['id','username','email','name','surname','avatar',]
views.py
class CustomUserAPIView(APIView):
def get(self,request):
serializer = CustomUserSerializer(request.user)
return Response(serializer.data)
我得到的是这个:
{
"id": 1,
"username": "admin",
"email": "test@gmail.com",
"name": "John",
"surname": "Test",
"avatar": "/media/images/avatar/1/photo.JPG"
}
但我需要的是这个:
{
"id": 1,
"username": "admin",
"email": "test@gmail.com",
"name": "John",
"surname": "Test",
"avatar": "http://127.0.0.1:8000/media/images/avatar/1/photo.JPG"
}
我该如何解决这个问题呢?提前感谢你的回复。
2 个回答
0
将 UPLOADED_FILES_USE_URL
这个设置改成 True
:
# settings.py
# …
REST_FRAMEWORK = {
'UPLOADED_FILES_USE_URL': True,
# …
}
1
使用 url
属性,这个属性在文件字段(FileFields)上是可以用的,图片字段(ImageFields)也是如此;你可以通过 field.source
很方便地获取它。
class CustomUserSerializer(serializers.ModelSerializer):
avatar = serializers.CharField(source="avatar.url")
class Meta:
model = CustomUser
fields = [
"id",
"username",
"email",
"name",
"surname",
"avatar",
]