2015-10-20 33 views
0

我想解釋如何使用.update()在這種情況下。下面的代碼:解釋Django .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()(它似乎不存在 - 是否有默認值?)

我想重寫這個更強大,我很難理解要發生什麼上。

回答

2

這兩者都不是,它根本不影響行。

序列化程序的輸出是一個標準的Python字典。字典有一個update方法;這就是這裏所稱的。

該代碼也可以同樣已被寫入:

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

這樣做更有意義。我會盡快接受。 –

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 

上述兩行初始化串行器與實例。當您傳遞給它的實例serializer.data時,它將返回包含該實例的序列化表示的字典。所以userdata是一個Python字典或者更確切地說是OrderedDict.

現在,當你有一本字典的說法叫.update()userdata,這將增加另一個關鍵target_iduserdata字典。

下面幾行是等同的。

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