Django REST Framework,当序列化器深度 = 1 时限制外键关系上的字段

Hen*_*ryM 1 django django-rest-framework

我正在使用 Django REST Framework,并且有一个序列化器,如下所示:

class UserProfileSerializer(serializers.ModelSerializer):   
    class Meta:
        model = UserProfile
        depth = 1
        fields = ['user','team','correct','wrong','percentage']
Run Code Online (Sandbox Code Playgroud)

user如果这传递了所有数据(包括散列密码),则会出现问题。如何限制传递的字段?

我有一个 UserSerializer 如下(它包含我真正想要的唯一字段):

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ['first_name','last_name','username']
Run Code Online (Sandbox Code Playgroud)

nev*_*ner 5

而不是depth选项显式声明user字段UserProfileSerializer并用于UserSerializer此字段:

class UserProfileSerializer(serializers.ModelSerializer):   
    user = UserSerializer()
    class Meta:
        model = UserProfile
        fields = ['user','team','correct','wrong','percentage']
Run Code Online (Sandbox Code Playgroud)

或者尝试build_nested_field像这样覆盖:

class UserProfileSerializer(serializers.ModelSerializer):   
    class Meta:
        model = UserProfile
        depth = 1
        fields = ['user','team','correct','wrong','percentage']

    def build_nested_field(self, field_name, relation_info, nested_depth):
        if field_name == 'user': 
            field_class = UserSerializer
            field_kwargs = get_nested_relation_kwargs(relation_info)

            return field_class, field_kwargs
        return super().build_nested_field(field_name, relation_info, nested_depth) 
Run Code Online (Sandbox Code Playgroud)