2 回答

TA貢獻(xiàn)1772條經(jīng)驗(yàn) 獲得超5個(gè)贊
我在使用depthMeta 屬性時(shí)遇到了同樣的問題。已password集成到序列化數(shù)據(jù)中。
第一個(gè)解決方案)
按照@JPG 對(duì)原始帖子的評(píng)論,我使用to_representation()了方法,它就像一個(gè)魅力!
我已經(jīng)結(jié)束了與我的用戶模型有關(guān)系的序列化程序的這段代碼:
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
它只是彈出我組中每個(gè)用戶的密碼字段。
第二種解決方案)
另一個(gè)簡(jiǎn)單的解決方案是直接引用您在其中明確排除密碼exclude = ('password',)(或不包含密碼)的 UserSerializer。
在我的例子中,結(jié)果會(huì)是這樣的:
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
)
兩種方式都有效。第二種方法的唯一問題是,在某些情況下,如果您也將其導(dǎo)入BaseGroupSerializer到BaseUserSerializer.
因此,根據(jù)您的情況和您對(duì)進(jìn)口的限制,...選擇您的解決方案:)

TA貢獻(xiàn)1798條經(jīng)驗(yàn) 獲得超7個(gè)贊
添加回答
舉報(bào)