DRF:如何在使用深度选项的序列化器中隐藏密码?

Moh*_*eza 5 python django django-serializer django-rest-framework drf-queryset

我正在为模型使用下面的序列化器User,但是当我使用深度来处理外键时,密码会显示在User对象中。

用户序列化器:

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        read_only_fields = ('is_active', 'is_staff', 'is_superuser',)
        exclude = ('password', )
        extra_kwargs = {'password': {'write_only': True, 'min_length': 4}}
Run Code Online (Sandbox Code Playgroud)

在下面的序列化器中一切都很好:

class AuditSerializer(serializers.ModelSerializer):
    def __init__(self, instance=None, **kwargs):
        if instance:
            setattr(self.Meta, 'depth', 10)
        else:
            setattr(self.Meta, 'depth', 0)
        super(AuditSerializer, self).__init__(instance, **kwargs)

    initiator = UserSerializer(read_only=True)

    class Meta:
        model = Audit
        fields = ['id', 'initiator']
        read_only_fields = ['id', 'initiator']
        depth = 0
Run Code Online (Sandbox Code Playgroud)

但在下面与之前的模型/序列化器相关的内容中,我遇到了密码问题:

class AuditAttachmentSerializer(serializers.ModelSerializer):
    def __init__(self, instance=None, **kwargs):
        if instance:
            setattr(self.Meta, 'depth', 10)
        else:
            setattr(self.Meta, 'depth', 0)
        super(AuditAttachmentSerializer, self).__init__(instance, **kwargs)

    class Meta:
        model = AuditAttachment
        fields = ['id', 'audit']
        read_only_fields = ['id']
        depth = 0
Run Code Online (Sandbox Code Playgroud)

Moh*_*eza 0

我删除了该__init__方法并将其更改为以下解决方案。

DRF:使用嵌套序列化器进行简单的外键分配?