Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python DRF:如何在使用深度选项的序列化程序中隐藏密码?_Python_Django_Django Rest Framework_Django Serializer_Drf Queryset - Fatal编程技术网

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

Python DRF:如何在使用深度选项的序列化程序中隐藏密码?,python,django,django-rest-framework,django-serializer,drf-queryset,Python,Django,Django Rest Framework,Django Serializer,Drf Queryset,我正在为用户模型使用下面的序列化程序,但是当我使用深度处理外键时,密码显示在用户对象中 用户序列化程序: class UserSerializer(serializers.ModelSerializer): 类元: 模型=用户 只读字段=('is_active'、'is_staff'、'is_superuser',) 排除=('password',) extra_kwargs={'password':{'write_only':True,'min_length':4} 在下面的序列化程序中,一

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

用户序列化程序:

class UserSerializer(serializers.ModelSerializer):
类元:
模型=用户
只读字段=('is_active'、'is_staff'、'is_superuser',)
排除=('password',)
extra_kwargs={'password':{'write_only':True,'min_length':4}
在下面的序列化程序中,一切正常:

类AuditSerializer(serializers.ModelSerializer): 定义初始化(self,实例=None,**kwargs): 例如: setattr(self.Meta,'depth',10) 其他: setattr(self.Meta,'depth',0) 超级(AuditSerializer,self)。\uuuu初始化(实例,**kwargs) 启动器=UserSerializer(只读=True) 类元: 模型=审计 字段=['id','initiator'] 只读字段=['id','initiator'] 深度=0 但在与先前的模型/序列化程序相关的以下示例中,我遇到了密码问题:

类AuditAttachmentSerializer(serializers.ModelSerializer):
定义初始化(self,实例=None,**kwargs):
例如:
setattr(self.Meta,'depth',10)
其他:
setattr(self.Meta,'depth',0)
超级(AuditAttachmentSerializer,self)。\uuuuu初始化(实例,**kwargs)
类元:
模型=附件
字段=['id','audit']
只读字段=['id']
深度=0

我删除了
\uuuu init\uuu
方法,并将其更改为以下解决方案


我在使用
depth
元属性时遇到了同样的问题。
密码
集成在序列化数据中

第一种解决方案)

在原始帖子的@JPG评论之后,我使用了
to_representation()
方法,它就像一个魔咒

我已经结束了与我的用户模型相关的序列化程序的代码:

来自django.contrib.auth.models导入组的

从rest_框架导入序列化程序
类BaseGroupSerializer(serializers.ModelSerializer):
类元:
模型=组
深度=1
字段=(
“id”,
“姓名”,
“用户集”,
)
def到_表示(自身、实例):
response=super().to_表示(实例)
对于响应中的用户。获取(“用户设置”):
user.pop(“密码”,无)
返回响应
它只是从我的组中的每个用户弹出密码字段

第二种解决方案)

另一个简单的解决方案是直接引用UserSerializer,您在其中明确排除了密码
exclude=('password',)
(或者不包括它)

就我而言,结果会是这样的:

来自django.contrib.auth.models导入组的

从rest_框架导入序列化程序
from..serializers.base\u user\u serializer导入BaseUserSerializer
类BaseGroupSerializer(serializers.ModelSerializer):

user_set=BaseUserSerializer(many=True)#您不能通过使用
depth
选项来控制字段的性质。为此,您必须使用嵌套序列化技术(正如您已经做过的那样),除此之外,还有一个简单的问题,您重写
\uu init\uuuuuuuo()的目的是什么
这样的方法?@ArakkalAbu当我想按id将对象添加到
ManyToManyField
时,DRF会引发错误。@ArakkalAbu在嵌套序列化技术中,对象不会添加到嵌套字段中。如果我有选择,我会使用此方法,