И это всё МОЁ
Есть пакет 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 из сериализатора?