Насколько я знаю, вам нужен отдельный сериализатор для просмотра списка.
Вы можете создать собственный сериализатор, который принимает аргумент fields
для выбора определенных полей. Но, вероятно, проще иметь отдельный для ListView
. Кроме того, для представления списка, если вы показываете только подмножество полей модели, вы можете использовать функцию only()
в наборе запросов, чтобы возвращать только те данные модели, которые вам нужны. Например:
qs = MyModel.objects.all().only('field_a', 'field_b', 'field_c')
Вот пользовательский сериализатор, если вы решите пойти по этому пути:
class CustomSerializer(serializers.ModelSerializer):
def __init__(self, *args, **kwargs):
selected_fields = kwargs.pop('selected_fields', None)
# used pop function so selected_fields is not passed to superclass
super().__init__(*args, **kwargs)
if selected_fields:
# make sure only fields for the model are allowed
fields = set(selected_fields)
current_fields = set(self.fields.keys())
for field in current_fields - fields:
self.fields.pop(field)
class MyModelSerializer(CustomSerializer):
class Meta:
model = MyModel
fields = '__all__'
В виде списка:
required_fields = ('field_a', 'field_b', 'field_c')
data_to_return = MyModelSerializer(model_queryset, many=True, fields=required_fields).data
return Response(data)