1

I don't know why, but my ImageFields return full URL pathes.

This is MEDIA_URL setting:

MEDIA_URL = '/cc/cc/media/'

I use this custom FileStorage:

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

And simple ModelSerializers (from django rest framework) without overwriting smth like that for model Module1Item:

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


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

What can be the reason of those behaviour? I need relative URLs.

Alexander Shpindler
  • 811
  • 1
  • 11
  • 31

2 Answers2

7

serializer's ImageField using absulute url by default. You can override to_representation method to change it:

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
neverwalkaloner
  • 46,181
  • 7
  • 92
  • 100
0

Another solution with example from the comments above.

class Module1ItemSerializer(serializers.ModelSerializer):
    background = serializers.CharField(source="background.url")
    class Meta:
        model = Module1Item
        fields = '__all__'
BaiJiFeiLong
  • 3,716
  • 1
  • 30
  • 28