Добавление данных внешнего ключа в сериализатор? - PullRequest
0 голосов
/ 31 августа 2018

Я пытаюсь использовать Django Rest-Framework для создания некоторого JSON, который показывает все сообщения пользователя, но также показывает изображения для этого сообщения. Изображение является внешним ключом для Post. Вот модели:

models.py

  class Post(models.Model):
        user            = models.ForeignKey(User, on_delete=models.CASCADE)
        status          = models.CharField(max_length=200)


    class Image(models.Model):
        post        = models.ForeignKey(Post, on_delete=models.CASCADE)
        img         = models.CharField(max_length=120)
        views_count = models.IntegerField(default=0)

views.py

class GetPosts(ListAPIView):
    serializer_class = PostSerializer

    def get_queryset(self):
        requested_user = get_requested_user(self)
        return Post.objects.filter(user=requested_user).order_by('-created_at')

def get_requested_user(self):
    filter_kwargs = {'username': self.kwargs['username']}
    return get_object_or_404(User.objects.all(), **filter_kwargs)

serializers.py

class PostSerializer(serializers.ModelSerializer):
    image_img = serializers.RelatedField(source='Image', read_only=True)
    class Meta:
        model = Post
        fields = ('status', 'image_img ')

В serializers.py я хотел бы показать все полей для изображения (img, views_count). Что я получаю с моим текущим кодом, это:

{
    "count": 1,
    "next": null,
    "previous": null,
    "results": [
        {
            "status": "I am number 1"
        }
    ]
}

Который содержит сообщения пользователя, но не сообщения пользователя и изображения каждого сообщения. Примечание. URL-адрес запроса выглядит следующим образом: / api / posts / user /

1 Ответ

0 голосов
/ 31 августа 2018

Вы должны использовать Вложенный сериализатор здесь,

<b>class ImageSerializer(serializers.ModelSerializer):
    class Meta:
        model = Image
        fields = ('img',)</b>


class PostSerializer(serializers.ModelSerializer):
    <b>image_img = ImageSerializer(source='image_set', many=True)</b>

    class Meta:
        model = Post
        fields = <b>'__all__'</b>



Следовательно, ответ будет таким:

{
    "count": 1,
    "next": null,
    "previous": null,
    "results": [
        {
            "status": "I am number 1",
            <b>"image_img": [
                {"img": "image_url"},
                {"img": "image_url"},
                ....
            ]</b>
        }
    ]
}



Как отобразить all поле класса модели в сериализаторе?

Из документа ,

Также можно установить для атрибута fields специальное значение '__all__', чтобы указать, что все поля в модели должны использоваться .



Ссылка
1. DRF- Вложенные реализации
2. source аргумент
3. Указание полей для включения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...