Obtener link de un ImageField en Django Rest Framework

ImageField difiere de FileField en cuanto a que el método .link no está disponible. Enviar vía DRF (Django Rest Framework) el link a una imagen no es un proceso “trivial”. Mi implementación se basa en usar Serializer Method Field. El código que sigue creo que es bastante esclarecedor:

serializers.py

from rest_framework import serializers
from .models import User, Avatar
from django.conf import settings

class AvatarSerializer(serializers.ModelSerializer):
    """ Returns all the avatars """
    download_link = serializers.SerializerMethodField()
    class Meta:
        model = Avatar
        fields = ('id', 'user', 'avatar', 'download_link')

    # GET Must be in front
    def get_download_link(self, obj):
        return '%s/%s' % (settings.MEDIA_ROOT , obj.avatar.name)

models.py

class Avatar(models.Model):
    """ Related_name must be set in order to catch related user avatars in the serializer"""
    user = models.ForeignKey(User, related_name='avatars')
    is_active = models.BooleanField(_('Show this avatar'), default=False)
    avatar = models.ImageField(_('Your profile picture'), blank=False, upload_to=set_avatar_directory, help_text=_('Let others see a picture or artwork that identifies you.'))

Aun así, es posible que exista una forma más óptima de llevar a cabo este proceso. Si la conoces no dudes en escribir un comentario o ponerte en contacto conmigo.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.