Cannot update a query once a slice has been taken

后端 未结 6 719
南笙
南笙 2020-12-09 02:51

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

6条回答
  •  佛祖请我去吃肉
    2020-12-09 03:42

    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)
    

提交回复
热议问题