Как включить изображение пользователя в экземпляр поста

У меня есть представление, которое возвращает мне каждое сообщение, то, что я пытаюсь сделать, это включить изображение аватара пользователя в сообщение.

Serializer

class PostSerializer(serializers.ModelSerializer):
    class Meta:
        model = Post
        fields = '__all__'

View

@api_view(['GET'])
def getPost(request):
    post = Post.objects.all().order_by('-date_posted')
    serializer = PostSerializer(post, many=True)
    return Response(serializer.data)

Модель пользователя

class User(AbstractBaseUser):
    email = models.EmailField(verbose_name="email", max_length=60, unique=True)
    username = models.CharField(max_length=30, unique=True)
    avatar = models.ImageField(default='default.jpg')

Постовая модель

class Post(models.Model):
    author = models.ForeignKey(User, on_delete=CASCADE)
    trade = models.CharField(max_length=100)
    trade_description = models.TextField(null=True)

Как сделать так, чтобы когда представление возвращает мне сообщение, оно также включало изображение аватара связанного пользователя? Поле аватара пользователя просто содержит ссылку на ведро amazon s3, в котором хранится изображение

Есть два пути

1. Вложенный сериализатор

Вы получите вложенный ответ

Объявите сериализатор для пользователя, затем включите его в сериализатор вашего сообщения:

class UserSerializer(serializers.ModelSerializer):

    class Meta:
        model = User
        fields = ('avatar', ...)


class PostSerializer(serializers.ModelSerializer):
    author = UserSerializer()

    class Meta:
        model = Post
        fields = '__all__'

2. Использовать источник

Это дает плоский ответ

class PostSerializer(serializers.ModelSerializer):
    author_avatar = serializers.ImageField(source='author.avatar')

    class Meta:
        model = Post
        fields = ('author_avatar', ...)
Вернуться на верх