2015-06-30 56 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()