首先,我想要前250名用户,并更新他们的top = 1
users = MyTable.objects.order_by('-month_length')[0: 250]
for u in users:
u.top = 1
u.save()
但是,实际上,我希望有一种优雅的方式,就像这样:
MyTable.objects.all().update(top=1)
此外,从这个问题:Django: Cannot update a query once a slice has been taken
这是否意味着无法写UPDATE ... WHERE ... LIMIT 5
?
答案 0 :(得分:0)
你可以试试这个
users = MyTable.objects.order_by('-month_length').values_list("id", flat = True)[0: 250]
MyTable.objects.filter(id__in = list(users)).update(top = 1)
*假设您在MyTable中有一个主键'id'
答案 1 :(得分:0)
在查询集被评估一次之前(此时它将自动缓存),将结果切换为新的查询集。如果已缓存查询集,则使用列表完成切片。至少我最后一次读到关于这个的Django代码,可能是在Django 1.5附近。