Динамический доступ к полям в django serilaizer
Я пытаюсь получить доступ к полям модели динамически (на основе вызова из фронтенда) в сериализаторе, но не могу этого сделать
код:
class DynamicFieldsModelSerializer(serializers.ModelSerializer):
def __init__(self, *args, **kwargs):
super(DynamicFieldsModelSerializer, self).__init__(*args, **kwargs)
print("self", self)
fields = self.context['request'].query_params.get('fields')
if fields:
fields = fields.split(',')
# Drop any fields that are not specified in the `fields` argument.
allowed = set(fields)
existing = set(self.fields.keys())
for field_name in existing - allowed:
self.fields.pop(field_name)
class ProductTestSerializer(DynamicFieldsModelSerializer, serializers.ModelSerializer):
class Meta:
model = Product
fields = ("id",)
class ProductTestAPIView(generics.ListAPIView):
def get(self, request):
obj = Product.objects.all()
data = ProductTestSerializer(obj, many=True)
s_data = data.data
return Response(s_data)
URL:
http://127.0.0.1:8000/products-test/?fields=id,short_code
Выдает следующую ошибку:
KeyError: 'request'
at
fields = self.context['request'].query_params.get('fields')
Передайте запрос при вызове DynamicFieldsModelSerializer, вот так:
serializer = DynamicFieldsModelSerializer(request.data, context={'request': request})