2 回答
TA贡献1772条经验 获得超5个赞
我在使用depthMeta 属性时遇到了同样的问题。已password集成到序列化数据中。
第一个解决方案)
按照@JPG 对原始帖子的评论,我使用to_representation()了方法,它就像一个魅力!
我已经结束了与我的用户模型有关系的序列化程序的这段代码:
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。
在我的例子中,结果会是这样的:
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.
因此,根据您的情况和您对进口的限制,...选择您的解决方案:)
添加回答
举报