И это всё МОЁ

Есть пакет drf-flex-fields, который позволяет фильтровать по параметру поля response


Итак,


from rest_flex_fields import FlexFieldsModelSerializerclass VcardSerializer(FlexFieldsModelSerializer):
class Meta:
model = Vcard
fields = "__all__"


Во вьюхе имеется параметр:


param_fields = openapi.Parameter(
'fields',
openapi.IN_QUERY,
type=openapi.TYPE_STRING,
required=False,
)


в метод list я добавляю этот параметр


@method_decorator(
name="list",
decorator=swagger_auto_schema(
manual_parameters=[param_fields]
),
)


Что мне нужно? Чтобы при передаче параметра


/?fields=__all__


было отсутствие фильтрации, т.е выдавались все fields, которые имеются. Как это реализовать?




Понятно, что если в сериализаторе сделать


 def __init__(self, *args, **kwargs):
super(VcardQuerySerializer, self).__init__(*args, **kwargs)
fields = kwargs['context']["request"].query_params.get("fields";)
print(fields)


то мы получим параметр


__all__


который передали при


curl -X GET "127.0.0.1:9997/some/vcard/?fields=__all__"; -H  "accept: application/json"


Дальше как вернуть все fields из сериализатора?









 , ,