Отображение только некоторых полей в ответе 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 сериализатора или где-то еще? Потому что в идеале он должен отображать только идентификаторы и ничего больше. Если да, то установите глубину в ноль и используйте поле метода сериализатора для возврата данных, которые вам нужны на фронтенде. Я могу предоставить вам примеры кода

Вернуться на верх