2015-06-30 85 views
0

我有一個函數應該將用戶創建的所有對象更新爲非活動狀態。所以,我編寫此:一次更新多個對象

def TurnOff(request, passed_id): 
    if request.user.is_authenticated(): 

     #this should set all objects to an inactive state 
     tmp = myModel.objects.filter(created_by=request.user).update(active=False) 

     #this is to set one specific object to an active state again 
     myModel = get_object_or_404(myModel, created_by=request.user, pk=passed_id) 
     tmp = myModel.objects.filter(created_by=request.user, pk=passed_id).update(active=True) 

     return HttpResponseRedirect("../started") 

    else: 
     return HttpResponseRedirect("/") 

tmp = myModel.objects.filter(created_by=request.user).update(active=False)不工作(這意味着假未設置),只有當我指定與其他關鍵字pk=ANY_ID的過濾器,但我想更新像其描述的所有對象docs

+0

的pK是指一個特定的個體對象。如果你想更新所有的對象,你爲什麼要通過PK過濾? –

+0

@DanielRoseman應該返回所有對象的過濾器沒有pk過濾屬性,只有第二個過濾器會重新激活一個特定對象。 – rwx

+0

你怎麼知道它不起作用,如果你在第一個過濾器之後循環,在myModel.objects.filter(created_by = request.user)並打印活動,你會得到什麼? –

回答

3

在這種情況下,用以下內容替換您的以下行,

tmp = myModel.objects.filter(created_by=request.user, pk=passed_id).update(active=True) 

tmp.active = False 
tmp.save() 

EDITED

由於 'TMP' 是你的基於myModel,它的目標因爲您使用pk來檢索它,所以只返回一個對象。

+0

不,這會給我只有一個對象,因爲pk被設置。 – rwx

+0

在這種情況下,替換您的以下行 'tmp.active = True'和' tmp.save()' 由於tmp是myModel的一個對象。 –

+1

這不是我的解決方案,但給了我一個解決方案的提示:使用'tmp = myModel.objects.all()','爲我在tmp:i.active = False i.save()'它的工作原理。 – rwx

0

變化

# after this line myModel is not Model anymore, but instance of myModel 
# with created_by=request.user and pk=passed_id 
myModel = get_object_or_404(myModel, created_by=request.user, pk=passed_id) 
# so this line doesn't work 
tmp = myModel.objects.filter(created_by=request.user, pk=passed_id).update(active=True) 

# you want to update _one_ instance, don't you? 
tmp = get_object_or_404(myModel, created_by=request.user, pk=passed_id) 
tmp.active = True 
tmp.save()