如何使 ImageField returns 相对路径?
How to make ImageField returns relative path?
我不知道为什么,但我的 ImageFields return 满 URL 路径。
这是MEDIA_URL设置:
MEDIA_URL = '/cc/cc/media/'
我使用这个自定义 FileStorage:
class ASCIIFileSystemStorage(FileSystemStorage):
def get_valid_name(self, name):
return str(uuid.uuid4()) + '.' + name.split('.')[-1]
和简单的 ModelSerializers(来自 django rest 框架)没有像模型 Module1Item 那样覆盖 smth:
class Module1Item(models.Model):
...
background = models.ImageField(blank=True)
class Module1ItemSerializer(serializers.ModelSerializer):
class Meta:
model = Module1Item
fields = '__all__'
这些行为的原因可能是什么?我需要亲戚 URLs.
序列化器的 ImageField
默认使用绝对值 url。您可以覆盖 to_representation
方法来更改它:
class Module1ItemSerializer(serializers.ModelSerializer):
class Meta:
model = Module1Item
fields = '__all__'
def to_representation(self, instance):
response = super(Module1ItemSerializer, self).to_representation(instance)
if instance.background:
response['background'] = instance.background.url
return response
我不知道为什么,但我的 ImageFields return 满 URL 路径。
这是MEDIA_URL设置:
MEDIA_URL = '/cc/cc/media/'
我使用这个自定义 FileStorage:
class ASCIIFileSystemStorage(FileSystemStorage):
def get_valid_name(self, name):
return str(uuid.uuid4()) + '.' + name.split('.')[-1]
和简单的 ModelSerializers(来自 django rest 框架)没有像模型 Module1Item 那样覆盖 smth:
class Module1Item(models.Model):
...
background = models.ImageField(blank=True)
class Module1ItemSerializer(serializers.ModelSerializer):
class Meta:
model = Module1Item
fields = '__all__'
这些行为的原因可能是什么?我需要亲戚 URLs.
序列化器的 ImageField
默认使用绝对值 url。您可以覆盖 to_representation
方法来更改它:
class Module1ItemSerializer(serializers.ModelSerializer):
class Meta:
model = Module1Item
fields = '__all__'
def to_representation(self, instance):
response = super(Module1ItemSerializer, self).to_representation(instance)
if instance.background:
response['background'] = instance.background.url
return response