Python 3.x 为什么可以';我的序列化程序不能同时更新名称和bio吗?已验证数据只有一个键值-bio

Python 3.x 为什么可以';我的序列化程序不能同时更新名称和bio吗?已验证数据只有一个键值-bio,python-3.x,django-rest-framework,Python 3.x,Django Rest Framework,我试图更新我的用户档案,但我无意中发现了一个问题:简历正在更新,而名字没有更新。使用调试器,它向我显示已验证的_数据只有“bio”键值对,并返回名称None,尽管我在可浏览API中的输入是name+bio 调试器: validated_data = {'bio': 'small update'} new_name = validated_data.get('name') new_name = None 我传递到可浏览API的内容: { "name": "ttt_changed,

我试图更新我的用户档案,但我无意中发现了一个问题:简历正在更新,而名字没有更新。使用调试器,它向我显示已验证的_数据只有“bio”键值对,并返回名称
None
,尽管我在可浏览API中的输入是name+bio

调试器:

validated_data = {'bio': 'small update'}
new_name = validated_data.get('name')
new_name = None
我传递到可浏览API的内容:

{
    "name": "ttt_changed,
    "bio": "small update"
}
这是我的序列化程序:

class ProfileSerializer (serializers.ModelSerializer):


    name = serializers.CharField(source='user.username',
                                         read_only=True)
    image = serializers.ImageField(use_url=True, required=False)

    def update(self, instance, validated_data):
        new_name = validated_data.get('name')
        myuser = validated_data.get('user', instance.user)
        myuser_username = validated_data.get('name', myuser.username)
        myuser.save()

        instance.bio = validated_data.get('bio', profile.bio)
        instance.save()

        return instance, myuser

    class Meta:
        model = Profile
        fields = ('name', 'bio', 'image')

MyUser与概要文件模型有一对一的关系


提前感谢您的回复,我无法理解为什么验证数据不包含名称。

第一个问题如下:

name = serializers.CharField(source='user.username',read_only=True)
您确实写了read_only为True,这是因为您在已验证的_数据键中看不到名称

下一个问题是:

myuser_username = validated_data.get('name', myuser.username)
下划线不能在myuser和username之间使用,因为username是myuser对象的一个属性,您应该在它们之间使用dote,如下所示:

myuser.username = validated_data.get('name', myuser.username)

第一个问题如下:

name = serializers.CharField(source='user.username',read_only=True)
您确实写了read_only为True,这是因为您在已验证的_数据键中看不到名称

下一个问题是:

myuser_username = validated_data.get('name', myuser.username)
下划线不能在myuser和username之间使用,因为username是myuser对象的一个属性,您应该在它们之间使用dote,如下所示:

myuser.username = validated_data.get('name', myuser.username)

谢谢你,Erfan,我完全忽略了
read_only=True
,因为get方法需要它,而我的注意力集中在更新上。现在它的工作方式应该是这样的!谢谢你,Erfan,我完全忽略了
read_only=True
,因为get方法需要它,而我的注意力集中在更新上。现在它的工作方式应该是这样的!