Django - Почему для некоторых полей FileFields возвращается полный URL, а для других нет?

enter image description here

Итак, у меня есть представление, которое возвращает список сообщений, похожих на сообщения на стене facebook. Как вы можете видеть на изображении выше, это включает в себя: изображения, видео, возможно, аватар, текст, метаданные о посте и метаданные о пользователе. Я получаю все соответствующие данные для поста через объединение таблиц.
. По какой-то причине Video и Photo возвращают полный URL с добавлением домена MEDIA_URL, но creator_avatar_url возвращает только хвостовую часть url (т.е. что-то вроде /media/user/avatar.jpeg). Почему мой код не возвращает полный URL для creator_avatar_url?

model.py

class User(AbstractDatesModel):
    uuid = models.UUIDField(primary_key=True)
    username = models.CharField(max_length=USERNAME_MAX_LEN, unique=True, validators=[
        MinLengthValidator(USERNAME_MIN_LEN)])
    created = models.DateTimeField('Created at', auto_now_add=True)
    updated_at = models.DateTimeField('Last updated at', auto_now=True, blank=True, null=True)
    avatar = models.ImageField(upload_to=avatar_directory_path, blank=True, null=True)

    @property
    def avatar_url(self):
        return self.avatar.url

class Post(models.Model):
    uuid = models.UUIDField(primary_key=True)
    created = models.DateTimeField('Created at', auto_now_add=True)
    updated_at = models.DateTimeField('Last updated at', auto_now=True, blank=True, null=True)
    creator = models.ForeignKey(
        User, on_delete=models.CASCADE, related_name="post_creator")
    body = models.CharField(max_length=POST_MAX_LEN, validators=[MinLengthValidator(POST_MIN_LEN)])


class Photo(AbstractBaseModel):
    post = models.OneToOneField(Post, on_delete=models.CASCADE)
    image = models.ImageField(upload_to=images_directory_path)

    @property
    def image_url(self):
        return self.image.url


class Video(AbstractBaseModel):
    post = models.OneToOneField(Post, on_delete=models.CASCADE)
    video = models.FileField(upload_to=videos_directory_path)

    @property
    def video_url(self):
        return self.video.url

helper.py

def query_to_full_post_data_serializer(request, post_query_set: QuerySet):
    query_set_annotated = post_query_set.annotate(
        creator_username=F('creator__username'),
        creator_avatar_url=F('creator__avatar'),
    ).prefetch_related(
        Prefetch('photo', Photo.objects.order_by('-created')),
        Prefetch('video', Video.objects.order_by('-created'))
    )
    return FullPostDataSerializer(query_set_annotated, many=True)

serializer.py

class FullPostDataSerializer(serializers.ModelSerializer):
    images = PhotoSerializer(source='photo', read_only=True)
    videos = VideoSerializer(source='video', read_only=True)
    creator_username = serializers.SlugField()
    creator_avatar_url = serializers.SlugField()

    class Meta:
        model = Post
        fields = (
            'body', 'created', 'creator_username',
            'images', 'uuid', 'creator', 'videos', 'creator_username', 'creator_avatar_url')

view.py

@api_view(['GET'])
def get_initial_posts(request, count):
    serializer = query_to_full_post_data_serializer(request=request,
                                                    post_query_set=Post.objects.filter(query).order_by('-uuid')[:count])
    return Response(serializer.data, status=status.HTTP_200_OK)

Вы сериализуете его с помощью SlugField().

Заменить:

creator_avatar_url = serializers.SlugField()

на serializer.py с:

creator_avatar_url = serializers.FileField()
Вернуться на верх