Сериализация только определенных полей из набора запросов в классе сериализатора django
У меня есть queryset, который я получаю из get_queryset()
. Мы знаем, что возврат queryset дает список объектов, который содержит все поля модели. Теперь я не хочу сериализовать все поля из модели и показать их все в ответе. Я хочу сериализовать только несколько полей и показать их в ответе api.
например:
def get_queryset(self):
"""""
filtering happens here on the query parameters.
"""
abc = self.request.GET.get('abc',None)
Теперь у меня есть функция defualt list, где я должен вызывать класс serializer только с определенными полями.
def list(self, request, *args, **kwargs):
queryset = self.get_queryset()
# data ={
# "name":queryset.
# }
# serializer = ExampleSerializer(data,many=True)
#serializer = serializers.serialize("json",queryset=queryset,fields=['id','name','address'])
return Response(serializer, status=status.HTTP_200_OK)
Когда я делаю print queryset, он выдает сложный queryset, а когда я делаю print(type(queryset))
, он выдает следующее
<class 'django.db.models.query.QuerySet'>
Как сериализовать поля имени и адреса только в класс exampleserializer? Я немного покопался и попытался сделать следующее
#serializer = serializers.serialize("json",queryset=queryset,fields=['id','name','address'])
но он не выдает вывод в нужном формате, не как обычный json. Также он выдает модель: Пример в ответе каждого объекта.
Вы пробовали?
queryset = self.get_queryset().values('name', 'address')
Я не уверен, что полностью понимаю, что вы пытаетесь получить, поскольку ваш код неполный, но кажется, что вам нужен ModelSerializer.
get_queryset()
должен использоваться для получения кверисета объектов, которые будут использоваться сериализатором благодаря наследованию DRF & mixins system:
# Serializer
class ExampleSerializer(serializers.ModelSerializer):
class Meta:
model = Example
fields = ('id', 'name', 'address')
# View
class ExampleList(ListAPIView):
serializer_class = ExampleSerializer
def get_queryset(self):
return Example.objects.filter(...)