Django 一次更新多个对象

Django 一次更新多个对象,django,django-views,Django,Django Views,我有一个函数,可以将用户创建的所有对象更新为非活动状态。所以我把它编码了: 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=Fals

我有一个函数,可以将用户创建的所有对象更新为非活动状态。所以我把它编码了:

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(创建人=request.user).update(active=False)
不起作用(这意味着未设置False),仅当我使用附加关键字
pk=ANY\u ID
指定筛选器时,但我希望更新所有对象,如中所述

在这种情况下,请替换以下行

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

tmp.active = False
tmp.save()
已编辑


因为“tmp”是myModel的一个对象,并且它只返回一个对象,因为您使用pk来检索它

在这种情况下,请替换以下行

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

tmp.active = False
tmp.save()
已编辑

因为“tmp”是myModel的一个对象,并且它只返回一个对象,因为您使用pk来检索它

变化

# 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)

改变


pk指的是特定的单个对象。如果你想更新所有对象,为什么要按pk过滤?@DanielRoseman应该返回所有对象的过滤器没有pk过滤属性,只有第二个过滤器会这样做以重新激活一个特定对象。如果在第一个过滤器之后在myModel.objects.filter上循环,你怎么知道它不起作用并打印活动,你得到了什么?@GaliaLadirayWeiss,因为我在其他地方做了
MyModel.objects.filter(由=request.user创建,active=True)
,这会返回多个对象。pk指的是特定的单个对象。如果你想更新所有对象,为什么要按pk过滤?@DanielRoseman应该返回所有对象的过滤器没有pk过滤属性,只有第二个过滤器会这样做以重新激活一个特定对象。如果在第一个过滤器之后在myModel.objects.filter上循环,你怎么知道它不起作用并打印活动的,你得到了什么?@GaliaLadirayWeiss,因为我在其他地方做了
MyModel.objects.filter(由=request.user创建,active=True)
这将返回多个对象。不,这将只给我一个对象,因为pk已设置。在这种情况下,请替换以下行
tmp=MyModel.objects.filter(创建者=request.user,pk=passed\u id)。使用
tmp.active=True
tmp.save()
更新(active=True)
,因为tmp是myModel的对象。这不是我的解决方案,但给了我解决方案的提示:使用
tmp=myModel.objects.all()
在tmp:i.active=False i.save()
有效。@rwx这并不理想,更新()背后的想法对于queryset,如果它更新数据库一次,那么您的解决方案的性能会很差。但在您的情况下,性能可能不是那么重要。无论如何,我倾向于怀疑代码的其他部分,您没有在您的postNo中输入,这只会给我一个对象,因为pk已设置。在这种情况下,请替换下面的行,
tmp=myModel.objects.filter(由=request.user创建,pk=passed\u id)。使用
tmp.active=True
tmp.save()
更新(active=True)
,因为tmp是myModel的对象。这不是我的解决方案,但给了我一个解决方案的提示:with
tmp=myModel.objects.all()
对于tmp中的i:i.active=False i.save()
它可以工作。@rwx这并不理想,更新()背后的想法对于queryset来说,如果它只更新一次数据库,那么您的解决方案的性能就会很差。但在您的情况下,性能可能并不那么重要。无论如何,我倾向于怀疑代码的其他部分,您没有在帖子中添加