【问题标题】:display only some fields in get api response django serializer在获取 api 响应 django 序列化程序中仅显示一些字段
【发布时间】:2022-01-27 10:51:22
【问题描述】:

我有一个示例模型,它与用户模型和博客模型具有 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)

我的序列化器:

类 ExampleSerializer(serializers.ModelSerializer):

class Meta:
    model = Example
    fields = ['user','blog','status']
    depth = 1

现在,当我用这个 get api 调用时,我得到了所有必需的示例对象,但所有不必要的用户字段,如密码、组等。我想要的只是用户的电子邮件和全名。博客也是如此,我只想要某些字段而不是全部。现在如何以最佳方式实现这一目标?

【问题讨论】:

    标签: django api django-rest-framework django-serializer


    【解决方案1】:

    您必须在嵌套序列化程序中指定必填字段。例如

    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']
    

    【讨论】:

      【解决方案2】:

      您是在序列化程序的 init 方法中还是在其他任何地方设置深度?因为理想情况下它应该只显示 id 而不是其他任何东西。如果是,则将深度设置为零并使用序列化程序的方法字段返回您在前端需要的数据。我可以为您提供示例代码示例

      【讨论】:

        猜你喜欢
        • 2021-02-13
        • 2021-12-28
        • 2018-02-17
        • 2016-08-23
        • 2019-01-17
        • 2017-01-12
        • 1970-01-01
        • 2020-08-17
        • 2014-01-05
        相关资源
        最近更新 更多