一次更新多个对象
Updating multiple objects at once
我有一个函数可以将用户创建的所有对象更新为非活动状态。所以我这样编码:
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)
不起作用(这意味着未设置 false),只有当我使用附加关键字 pk=ANY_ID
指定过滤器时,但我想更新所有对象,如其描述的在 docs!
在这种情况下,替换您的以下行,
tmp = myModel.objects.filter(created_by=request.user, pk=passed_id).update(active=True)
具有以下内容:
tmp.active = False
tmp.save()
已编辑
因为 'tmp' 是你的 myModel 的一个对象,它 returns 只有一个对象,因为你正在使用 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)
至
# 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()
我有一个函数可以将用户创建的所有对象更新为非活动状态。所以我这样编码:
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)
不起作用(这意味着未设置 false),只有当我使用附加关键字 pk=ANY_ID
指定过滤器时,但我想更新所有对象,如其描述的在 docs!
在这种情况下,替换您的以下行,
tmp = myModel.objects.filter(created_by=request.user, pk=passed_id).update(active=True)
具有以下内容:
tmp.active = False
tmp.save()
已编辑
因为 'tmp' 是你的 myModel 的一个对象,它 returns 只有一个对象,因为你正在使用 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)
至
# 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()