解释Django.update()

2024-10-02 16:29:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图解释.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')

可以看出,目标_id不在序列化程序中

所以我想知道这个.update()方法是如何更新原始模型行的,我想知道它的文档在哪里-这是QuerySet.update()吗?是serializer.update()吗(它似乎不存在-是否存在默认值?)

我正试图重写它,使其更加健壮,我很难理解到底发生了什么


Tags: answeriddatagetobjectsusernameupdatesec
2条回答

这里使用的.update()不是Django^{},而是Python字典^{}.

oserializer = OtherSerializer(other) # initialize the serializer with the instance
userdata = userializer.data # get serialized representation of the object

以上两行使用实例初始化序列化程序。当您对传递给它的实例执行serializer.data操作时,它将返回一个包含该实例的序列化表示的字典。所以userdata是Python字典,或者更准确地说是^{}.

现在,当您使用dictionary参数调用userdata上的.update()时,它将向userdata字典添加另一个键target_id

以下几行是等效的

userdata.update({'target_id': oserializer['target'].value})
userdata['target_id'] = oserializer['target'].value

这两者都不是,它根本不会影响这场争吵

序列化程序的输出是一个标准Python字典。Dicts有一个update方法;这就是这里所说的

这段代码也可以写成:

userdata['target_id'] = oserializer['target'].value

相关问题 更多 >