我试图破译在这种情况下如何使用.update()。这是代码:
user = User.objects.get(username=username)
userializer = UserSerializer(user)
other = Other.objects.get(other=userializer.data['user_id'])
oserializer = OtherSerializer(other)
userdata = userializer.data
userdata.update({'target_id': oserializer['target'].value})
这是UserSerializer:
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ('user_id',
'username',
'sec_question_1',
'sec_answer_1',
'sec_question_2',
'sec_answer_2',
'sec_question_3',
'sec_answer_3',
'roles')
正如您所知,target_id不在序列化程序中。
所以我想知道这个.update()方法是如何更新原始模型行的,并且我想知道它的文档在哪里 - 这是QuerySet .update()吗?它是序列化器.update()(它似乎不存在 - 是否有默认值?)
我试图将其改写为更强大,并且我很难理解正在发生的事情。
答案 0 :(得分:2)
它既不是那些,也不会影响行。
序列化程序的输出是标准的Python字典。 Dicts有update
方法;这就是这里所说的。
该代码也可以写成:
userdata['target_id'] = oserializer['target'].value
答案 1 :(得分:0)
此处使用的.update()
不是Django QuerySet.update()
,而是Python词典.update()
.
oserializer = OtherSerializer(other) # initialize the serializer with the instance
userdata = userializer.data # get serialized representation of the object
以上2行用实例初始化序列化器。当你serializer.data
传递一个实例时,它会返回一个字典,其中包含该实例的序列化表示。所以userdata
是一个Python字典,或者更确切地说是OrderedDict
.
现在,当您使用字典参数在.update()
上调用userdata
时,它会在target_id
词典中添加另一个键userdata
。
以下几行相同。
userdata.update({'target_id': oserializer['target'].value})
userdata['target_id'] = oserializer['target'].value