Django Rest Framework - Сериализатор не работает

Я пытаюсь создать API для блога, который будет состоять из пользовательских постов и экземпляров комментариев. Я использую Django & Django Rest Framework для создания API, который будет возвращать данные в формате JSON. Ниже приведен пример возвращаемых данных в формате JSON:


    "id": 2,
    "user": 1,
    "user_photo": "http://127.0.0.1:8000/media/users/abc.jpg",
    "is_owner": true,
    "description": "Hey there, this is my post and I like it",
    "images": [
        {
            "id": 3,
            "post": 2,
            "image": "http://127.0.0.1:8000/media/posts/foo.jpg",
            "comment": "This is image #1"
        },
        {
            "id": 4,
            "post": 2,
            "image": "http://127.0.0.1:8000/media/posts/bar.jpg",
            "comment": "This is image #2"
        }
    ],
    "created": "2022-03-23T16:58:44.800255+03:00",
    "likes": [
        1
    ],
    "comment_count": 1,
    "comments": [
        {
            "id": 3,
            "post": 2,
            "text": "This is a comment on my post",
            "user": 1,
            "likes": [],
            "created": "2022-03-23T17:00:27.074362+03:00",
            "images": [
                3, <----- should be URL to the image, not just id (like above)
                4  <----- should be URL to the image, not just id (like above)
            ]
        }
    ]
}

Моя проблема в том, что в то время как изображения Post возвращаются в JSON правильно, мои изображения PostComment возвращаются просто как массив id, без URL. Я указал стрелками в коде, где я пытаюсь получить массив объектов (id & URL). Я подозреваю, что это происходит из-за каких-то проблем в сериализаторе, но я просто не могу определить их. Вот мой код сериализатора:

class PostCommentImageSerializer(serializers.ModelSerializer):
    class Meta:
        model = PostCommentImage
        comment = serializers.ReadOnlyField(source='comment.id')
        fields = ('id', 'comment', 'image')
        read_only_fields = ('id', 'comment', 'image')

class PostCommentSerializer(serializers.ModelSerializer):
    class Meta:
        model = PostComment
        post = serializers.ReadOnlyField(source='post.id')
        images = PostCommentImageSerializer()
        fields = ('id', 'post', 'text', 'user', 'likes', 'created', 'images')
        read_only_fields = ('id', 'user', 'created', 'images')

Как вы можете видеть в моем PostCommentSerializer я добавил строку images = PostCommentImageSerializer(), так что он должен возвращать массив объектов, а не просто массив целых чисел id, и related_name в models.py установлен правильно на 'images', так что я в растерянности, что может быть источником проблемы.

Я подозреваю, что это должно быть что-то простое, но я не могу найти причину этого. Любая помощь будет очень признательна!

You have defined below serializer field in Meta class of PostCommentSerializer.

comment_images = PostCommentImageSerializer(
            many=True, read_only=True)

Correct Implementation is :

class PostCommentSerializer(serializers.ModelSerializer):
    comment_images = PostCommentImageSerializer(many=True, read_only=True)
class Meta:
    model = PostComment
    post = serializers.ReadOnlyField(source='post.id')
    fields = ('id', 'post', 'text', 'likes', 'created', 'comment_images')
    read_only_fields = ('id', 'created', 'comment_images', 'likes')
Вернуться на верх