首页 > 解决方案 > 如何使用 python 和 django 使某些字段在 api 输出中不可见?

问题描述

我有父(AccessInternalSerializer)和子序列化器(AccessSerializer)类,如下所示,

class AccessInternalSerializer(AccessBaseSerializer):
    private_key = serializers.FileField(
        allow_null= True,
        required=False)
    ca_cert=serializers.FileField(
        allow=True,
        required=False)

    def to_representation(self, obj):
        data = super().to_representation(obj)
        data['private_key'] = obj.private_key
        data['ca_cert'] = obj.ca_cert
        return data
   
    class Meta(AccessBaseSerializer.Meta):
        model=Access
        extra_kwargs = {
           'auth_failure': {
               read-only: True
            }
        }
      
class AccessSerializer(AccessInternalSerializer): 
    private_key = serializers.FileField(
        write_only=True,
        allow_null=True,
        required=False)
    ca_cert=serializers.FileField(
        write_only=True,
        allow_null=True,
        required=False)
    class Meta(AccessInternalSerializer.Meta):
        extra_kwargs={
            **AccessInternalsSerializer.Meta.extra_kwargs,
            'private_key': {
                'write_only':True, 
            }
            'ca_cert': {
                'write_only': True,
            }
        }

现在由于某种原因,上面的代码使用 AccessSerializer 在 api 的输出中显示了 private_key 和 ca_cert。

使用 AccessInternalSerializer to_representation,我使 private_key 和 ca_cert 字段在使用 AccessInternalSerializer 的 api 输出中可见。

但是使用 AccessSerializer 的行为相同。

我希望 api 输出不会使用 AccessSerializer 返回 private_key 和 ca_cert 字段。

我不确定我哪里出错了。我是 python 和 django 编程的新手。我很长时间以来都坚持这一点。

有人可以帮我解决这个问题。谢谢。

标签: pythondjango

解决方案


推荐阅读