Django, DRF: Удаление определенного поля сериализатора только на первой странице

Как убрать field3 и field4 только на первой странице? Мне нужно что-то, что можно динамически повторно использовать, поскольку я планирую использовать его в нескольких представлениях.

class CustomSerializer(serializers.ModelSerializer):
    class Meta:
        model = Model
        fields = ('field', 'field2', 'field3', 'field4')


class CustomView(ListAPIView):
    serializer_class = CustomSerializer

Вы можете написать два разных сериализатора, первый из которых содержит field3 & field4, а второй не включает эти два поля. Затем из ваших представлений используйте метод get_serializer_class() для выбора подходящего сериализатора для предоставленных page.

Вам понадобится что-то вроде этого в ваших представлениях -

class CustomSerializerWithFields(serializers.ModelSerializer):
    class Meta:
        model = Model
        fields = ('field', 'field2', 'field3', 'field4')

class CustomSerializerWithoutFields(serializers.ModelSerializer):
    class Meta:
        model = Model
        fields = ('field', 'field2')

class CustomView(ListAPIView):
    def get_serializer_class(self):
        if self.request.query_params["page"]==1:
            return CustomSerialierWithoutFields
        return CustomSerializerWithFields

Попробуйте использовать контекст сериализатора. Таким образом вы сможете оценивать данные запроса и параметры в методах сериализатора, например to_representation, что полезно в вашем случае. PS. Этот код был написан в окне stackoverflow, он может содержать некоторые ошибки, но он показывает подход

class CustomView(ListAPIView):
    def get_serializer(self, *args, **kwargs):
        serializer_class = self.get_serializer_class()
        kwargs['context'] = {'request': self.request}
        return serializer_class(*args, **kwargs)

class CustomSerializer2(serializers.ModelSerializer):
    class Meta:
        model = Model
        fields = ['field1', 'field2', 'field3']
    
    def to_representation(self, instance, **kwargs):
        if self.context.get('request').query_params.get('page') == 1:
            return {'field1': instance.field1, 'field2': instance.field2}
        return {'field1': instance.field1, 'field3': instance.field3}
Вернуться на верх