Как включить изображение пользователя в экземпляр поста
У меня есть представление, которое возвращает мне каждое сообщение, то, что я пытаюсь сделать, это включить изображение аватара пользователя в сообщение.
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', ...)