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ù)您的情況和您對進口的限制,...選擇您的解決方案:)
添加回答
舉報