Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Cannot update a query once a slice has been taken

I am trying to do this:

UserLog.objects.filter(user=user).filter(action='message').filter(timestamp__lt=now)[0:5].update(read=True) 

but I am getting this error:

Cannot update a query once a slice has been taken. 

(using django 1.2.1)

What am I doing wrong?

like image 929
xpanta Avatar asked Nov 26 '10 12:11

xpanta


1 Answers

The documentation suggests that something like the following might be possible - I'm not sure if doing the limiting in an inner QuerySet bypasses the check around calling update() after slicing:

inner_q = UserLog.objects.filter(user=user,                                  action='message',                                  timestamp__lt=now).values('pk')[0:5] UserLog.objects.filter(pk__in=inner_q).update(read=True) 

Failing that, you could use the in field lookup like so:

ids = UserLog.objects.filter(user=user,                              action='message',                              timestamp__lt=now).values_list('pk', flat=True)[0:5] UserLog.objects.filter(pk__in=list(ids)).update(read=True) 
like image 163
Jonny Buchanan Avatar answered Sep 20 '22 09:09

Jonny Buchanan