@drf-152-04

Django REST framework | Как сделать «фильтрацию» внутри Serializer?

Вопрос к знатокам Django REST framework.

Помогите, пожалуйста, понять каким образом можно сделать "фильтрацию" внутри Serializer.

Для наглядности создал тестовый проект https://github.com/drf-152/drf04

У меня есть view:

class AAAAFeedView(ListAPIView):
        permission_classes = (permissions.AllowAny, )
        queryset = AAAA.objects.all()
        serializer_class = AAAASerializer


И serializers:

class CCCCSerializer(serializers.ModelSerializer):
    
        class Meta:
            model = CCCC
            fields = ('id', 'name', 'show_me')
    
    
    class BBBBCCCCSerializer(serializers.ModelSerializer):
    
        bb_ccs = CCCCSerializer(many=True)
    
        class Meta:
            model = BBBB
            fields = ('id', 'name', 'bb_ccs')
    
    
    class AAAASerializer(serializers.ModelSerializer):
    
        bbs = BBBBCCCCSerializer(many=True)
    
        class Meta:
            model = AAAA
            fields = ('id', 'name', 'bbs')


При запросе:

curl -H 'Accept: application/json; indent=4' http://127.0.0.1:8000/api/v1/feed/


Получаю в ответ:

[
        {
            "id": 1,
            "name": "aa01",
            "bbs": [
                {
                    "id": 1,
                    "name": "bb01",
                    "bb_ccs": [
                        {
                            "id": 1,
                            "name": "cc01",
                            "show_me": false
                        },
                        {
                            "id": 2,
                            "name": "cc02",
                            "show_me": true
                        },
                        {
                            "id": 3,
                            "name": "cc03",
                            "show_me": false
                        },
                        {
                            "id": 4,
                            "name": "cc04",
                            "show_me": true
                        }
                    ]
                }
            ]
        },
        {
            "id": 2,
            "name": "aa02",
            "bbs": [
                {
                    "id": 2,
                    "name": "bb02",
                    "bb_ccs": []
                }
            ]
        }
    ]


Есть необходимость для поля "bb_ccs" (внутри "bbs") показывать ТОЛЬКО объекты с условием "show_me": true.

Каким образом можно добиться желаемого результата?

Заранее спасибо за помощь.

P.S. Разместил этот вопрос на нескольких ресурсах.
  • Вопрос задан
  • 1622 просмотра
Решения вопроса 2
@ilov3
Учу питон и джангу потому что модно
Создай метод get_bb_ccs в классе BBBBCCCCSerializer, который сериализирует и возвращает объект с проверкой атрибута show_me
Тут подробнее -
www.django-rest-framework.org/api-guide/fields/#se...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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