@9550668

Почему сериализатор работает по-разному?

Всем здравствуйте!

У меня есть несколько сериализаторов:
User_avatar_serializer.py:
from rest_framework import serializers

from users.models import UserAvatar:
class UserAvatarSerializer(serializers.ModelSerializer):
    class Meta:
        model = UserAvatar
        fields = [
            "local_url",
        ]

    def to_representation(self, instance):
        ret = super().to_representation(instance)
        return ret["local_url"]


User_serializer.py:
from rest_framework import serializers

from api.users.serializers.user_avatar_serializer import UserAvatarSerializer
from users.models import User


class UserShortSerializer(serializers.ModelSerializer):
    avatar = UserAvatarSerializer(required=False, read_only=True)

    class Meta:
        model = User
        fields = [
            "id",
            "username",
            "first_name",
            "last_name",
            "avatar",
            "first_time",
        ]


Если я через вьюшку обращаюсь к сериализатору UserShortSerializer, то выдача ссылки на аватар через внутренний вызов UserAvatarSerializer следующая:
...
"avatar": "127.0.0.1:8000/media/user/avatar/1bbcd0e1-b7a8-44f...",
...


Если же я обращаюсь внутри других сериализаторов не связанных с пользователями и мне необходимо в ответе выдать инфо по запрашиваемому пользователю, то я переписываю функцию to_representation, на примере:
def to_representation(self, instance):
        ...   
        ret["participants_info"] = {
            ...
            "avatars": UserAvatarSerializer(instance=avatar_list, many=True, required=False).data,
            ...
        }
        return ret


В этом случае я получаю при выводе:
...
"avatars": [
"/media/home/app/marathon/static/images/bg01.jpg"
],
...

Не понимаю, почему во второй выдаче отсуствует "127.0.0.1:8000"?
Понятно, что в первом варианте я перенаправляю поле аватара на сериализатор UserAvatarSerialize:
avatar = UserAvatarSerializer(required=False, read_only=True)

А во втором вызываю сериализатор вот так:
UserAvatarSerializer(instance=avatar_list, many=True, required=False).data,


Как мне в итоге сделать так, чтобы в обоих случаях вначале писалось доменное имя?
  • Вопрос задан
  • 120 просмотров
Решения вопроса 1
@django-developer
Не указал контекст, в который надо пробросить запрос.

Подробнее в документации: https://www.django-rest-framework.org/api-guide/se...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы