如何使ImageField返回相对路径?

时间:2018-07-18 12:09:37

标签: python django url django-rest-framework imagefield

我不知道为什么,但是我的ImageFields返回完整的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框架),而不会覆盖类似Model1Item模型的内容:

class Module1Item(models.Model):
    ...
    background = models.ImageField(blank=True)


class Module1ItemSerializer(serializers.ModelSerializer):
    class Meta:
        model = Module1Item
        fields = '__all__'

这些行为的原因可能是什么?我需要相对网址。

1 个答案:

答案 0 :(得分:4)

序列化器的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