如何让 ImageField 返回相对路径?

Ale*_*ler 1 python django url imagefield django-rest-framework

我不知道为什么,但我的 ImageFields 返回完整的 URL 路径。

这是 MEDIA_URL 设置:

MEDIA_URL = '/cc/cc/media/'
Run Code Online (Sandbox Code Playgroud)

我使用这个自定义 FileStorage:

class ASCIIFileSystemStorage(FileSystemStorage):
    def get_valid_name(self, name):
        return str(uuid.uuid4()) + '.' + name.split('.')[-1]
Run Code Online (Sandbox Code Playgroud)

和简单的 ModelSerializers(来自 django rest 框架),而不会像模型 Module1Item 那样覆盖 smth:

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


class Module1ItemSerializer(serializers.ModelSerializer):
    class Meta:
        model = Module1Item
        fields = '__all__'
Run Code Online (Sandbox Code Playgroud)

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

nev*_*ner 7

序列化程序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
Run Code Online (Sandbox Code Playgroud)