Python 3.x 为什么可以';我的序列化程序不能同时更新名称和bio吗?已验证数据只有一个键值-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,
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方法需要它,而我的注意力集中在更新上。现在它的工作方式应该是这样的!