在我的数据库中,我存储了一个特定图像的文件名。假设这是models.py
from django.db import models
class Product(models.Model):
sku = models.CharField(validators=[isalphanumeric], max_length=20, null=False, blank=False)
image = models.CharField(max_length=20, blank=False, null=False)
然后我在serializers.py
from rest_framework import serializers
from app.models import Product
class ProductSerializer(serializer.ModelSerializer):
class Meta:
model = Product
fields = '__all__'
我想要的是能够在Product
的图像中添加一个字符串,使其成为表示相对链接的字符串,例如:
storage_location = '/assets/img'
img_url = f'{storage_location}/{image}'
之所以要这样做,是因为我想灵活使用url,而不是将文件名设置为“文件位置”,然后每次更改图像排列方式时都必须更新数据库(我仍然不确定如何存储它们。)
我该怎么做?
答案 0 :(得分:3)
首先,您可以使用模型的ImageField
:
class Product(models.Model):
sku = models.CharField(validators=[isalphanumeric], max_length=20, null=False, blank=False)
image = models.ImageField(max_length=20, blank=False)
这将在您获取值时自动将MEDIA_URL
设置添加到该值。
如果要使用CharField
,可以使用SerializerMethodField
在序列化程序级别执行所需的操作:
class ProductSerializer(serializer.ModelSerializer):
image = serializers.SerializerMethodField()
def get_image(self, obj):
storage_location = '/assets/img'
img_url = f'{storage_location}/{obj.image}'
return img_url
class Meta:
model = Product
fields = '__all__'
答案 1 :(得分:0)
尝试在您的serialiser.py
class ProductSerializer(serializer.ModelSerializer):
img_url = serializers.SerializerMethodField()
class Meta:
model = Product
fields = '__all__'
#fields = ('sku', 'img_url') # This is what i will prefer
def get_img_url(self, obj):
storage_location = '/assets/img'
img_url = f'{storage_location}/{obj.image}'
return img_url
祝你好运!