I\'ve defined a simple Django app that includes the following model:
class Project(models.Model):
name = models.CharField(max_length=200)
thumbnail =
I found it annoying to write the same code for a serialized method field.
If you have set correctly the MEDIA_ROOT to your S3 bucket URL, you can add a field to the serializer like:
class ProjectSerializer(serializers.ModelSerializer):
logo_url = serializers.URLField(read_only=True, source='logo.url')
class Meta:
model = Project
logo is an ImageField in the model. it must not be nullable in order to avoid errors like ValueError: The 'img' attribute has no file associated with it.
I only use .build_absolute_uri in a serializer methodfield to return absolute urls that use other views in my API. for example, in my project there is an URL /webviews/projects/ that shows, a title and a button that collects some user input (i.e. not exactly what you would do with suffixes, as it's not a plain representation of the resource but includes some logic instead). the end point /projects/ contains a field "webview_url" ponting there, which is generated with SerializerMethodField. it's not media.