由于我的项目的性质,我发现自己不断从查询集中获取切片,如下所示:
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)
| 归档时间: |
|
| 查看次数: |
3296 次 |
| 最近记录: |