Отображение только некоторых полей в ответе get api сериализатор django
У меня есть пример модели, которая имеет fk отношение с моделью пользователя и моделью блога. Теперь у меня есть get api, который требует отображения только определенных полей пользователя.
Моя модель:
class Example(models.Model):
user = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete=models.CASCADE,
null=True,
related_name="user_examples",
)
blog = models.ForeignKey(
Blog,
on_delete=models.CASCADE,
null=True,
related_name="blog_examples",
)
/................./
Теперь мое мнение:
class ExampleView(viewsets.ModelViewSet):
queryset = Example.objects.all()
serializer_class = ExampleSerializer
def list(self, request, *args, **kwargs):
id = self.kwargs.get('pk')
queryset = Example.objects.filter(blog=id)
serializer = self.serializer_class(queryset,many=True)
return Response(serializer.data,status=200)
Мой сериализатор:
class ExampleSerializer(serializers.ModelSerializer):
class Meta:
model = Example
fields = ['user','blog','status']
depth = 1
Теперь, когда я вызываю этот get api, я получаю все объекты примера, которые необходимы, но все ненужные поля пользователя, такие как пароль, группа и т.д. . Мне нужен только email и полное имя пользователя. То же самое с блогом, мне нужны только определенные поля, а не все. Как этого добиться наилучшим образом?
Вам придется указать необходимые поля во вложенных сериализаторах. например,
class BlogSerializer(serializers.ModelSerializer):
class Meta:
model = Blog
fields = ['title', 'author']
class ExampleSerializer(serializers.ModelSerializer):
blog = BlogSerializer()
class Meta:
model = Example
fields = ['user','blog','status']
Вы устанавливаете глубину в методе init сериализатора или где-то еще? Потому что в идеале он должен отображать только идентификаторы и ничего больше. Если да, то установите глубину в ноль и используйте поле метода сериализатора для возврата данных, которые вам нужны на фронтенде. Я могу предоставить вам примеры кода