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的对象。这不是我的解决方案,但给了我一个解决方案的提示:withtmp=myModel.objects.all()
,对于tmp中的i:i.active=False i.save()
它可以工作。@rwx这并不理想,更新()背后的想法对于queryset来说,如果它只更新一次数据库,那么您的解决方案的性能就会很差。但在您的情况下,性能可能并不那么重要。无论如何,我倾向于怀疑代码的其他部分,您没有在帖子中添加