第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

DRF:如何在使用深度選項的序列化程序中隱藏密碼?

DRF:如何在使用深度選項的序列化程序中隱藏密碼?

蠱毒傳說 2023-02-07 11:07:54
我正在為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}}在下面的序列化程序中,一切都很好: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但是在下面與以前的模型/序列化器相關的部分中,我遇到了密碼問題: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
查看完整描述

2 回答

?
月關寶盒

TA貢獻1772條經(jīng)驗 獲得超5個贊

我在使用depthMeta 屬性時遇到了同樣的問題。已password集成到序列化數(shù)據(jù)中。


第一個解決方案)


按照@JPG 對原始帖子的評論,我使用to_representation()了方法,它就像一個魅力!


我已經(jīng)結(jié)束了與我的用戶模型有關系的序列化程序的這段代碼:


from django.contrib.auth.models import Group

from rest_framework import serializers



class BaseGroupSerializer(serializers.ModelSerializer):


    class Meta:

        model = Group

        depth = 1

        fields = (

            'id',

            'name',

            'user_set',

        )

    

    def to_representation(self, instance):

        response = super().to_representation(instance)

        for user in response.get("user_set"):

            user.pop("password", None)

        return response

它只是彈出我組中每個用戶的密碼字段。


第二種解決方案)


另一個簡單的解決方案是直接引用您在其中明確排除密碼exclude = ('password',)(或不包含密碼)的 UserSerializer。


在我的例子中,結(jié)果會是這樣的:


from django.contrib.auth.models import Group

from rest_framework import serializers

from ..serializers.base_user_serializer import BaseUserSerializer



class BaseGroupSerializer(serializers.ModelSerializer):


    user_set = BaseUserSerializer(many=True)       # <------


    class Meta:

        model = Group

        depth = 1

        fields = (

            'id',

            'name',

            'user_set',

        )

BaseUserSerializer原樣:


from rest_framework import serializers

from ..models.base_user import User



class BaseUserSerializer(serializers.ModelSerializer):


    class Meta:

        model = User

        depth = 1

        fields = (

            'id',

            'username',

            'email',

            'first_name',

            'last_name',

            'full_name',

            'full_identification',

            'is_active',

            'groups',

            # 'password' is omitted here

        )


兩種方式都有效。第二種方法的唯一問題是,在某些情況下,如果您也將其導入BaseGroupSerializer到BaseUserSerializer.


因此,根據(jù)您的情況和您對進口的限制,...選擇您的解決方案:)


查看完整回答
反對 回復 2023-02-07
?
元芳怎么了

TA貢獻1798條經(jīng)驗 獲得超7個贊

我刪除了該__init__方法并將其更改為以下解決方案。

DRF:使用嵌套序列化程序的簡單外鍵分配?


查看完整回答
反對 回復 2023-02-07
  • 2 回答
  • 0 關注
  • 159 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號