"切片拍摄后无法更新查询".最佳做法?

fla*_*ino 5 python django

由于我的项目的性质,我发现自己不断从查询集中获取切片,如下所示:

Thread.objects.filter(board=requested_board_id).order_by('-updatedate')[:10]
Run Code Online (Sandbox Code Playgroud)

但这让我遇到了实际使用我选择的元素进行处理的问题,因为切片后任何类型的.update()或.filter()都不起作用.

我知道有几种方法可以解决它,但它们都是混乱和混乱,严重降低了代码的可读性,特别是当我不得不经常这样做时.

什么是解决切片过滤器限制的最佳方法?

fla*_*ino 16

到目前为止,根据评论,我发现丹尼尔罗斯曼的解决方案是最"丑陋"的:

sliced_queryset = Somemodel.objects.filter(field='fieldvalue')[:5]
Run Code Online (Sandbox Code Playgroud)

然后用于id__in=引用切片的查询集对象的ID:

Somemodel.objects.filter(id__in=sliced_queryset).update(field_to_update='whatever')
Run Code Online (Sandbox Code Playgroud)

它运作良好,我刚尝试过.

我希望Django有一个更"直接"的方式来做到这一点,但它仍然非常简单.如果有人有更好的方法,请发布它,我会将你的答案标记为正确.


作为一些额外的建议,如果你使用它来增加一个字段,比如'views'字段,你可以像这样干净地自我引用它:

from django.db.models import F

Somemodel.objects.filter(id__in=sliced_queryset).update(views=F('views')+1)
Run Code Online (Sandbox Code Playgroud)