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

[code language=»python»]
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)
[/code]

models.py

[code language=»python»]
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.’))

[/code]

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.