我在我的主页视图中有以下代码。
latest_entry_list = Entry.objects.filter(is_published=True).order_by('-date_published')[:10]
for entry in latest_entry_list:
entry.views = entry.views + 1
entry.save()
如果从初始查询返回了十行(限制),那么保存是否会向数据库发出10个单独的更新调用,还是Django“聪明”到只发出一个更新调用?
是否有更有效的方法来实现这个结果?
.order_by('-date_published')
.values_list('id', flat=True)[:10] - Guillaume Esquevin
F
的方法:from django.db.models import F
。 我尝试进行编辑,但被拒绝了。这个答案在谷歌上很容易找到,但从这里获取这些信息几乎是不可能的。它不在答案中,也不在链接的文档中,而且通过谷歌也很难找到(因为它只是一个字符)。 - graupin
语句,尝试将values_list
转换为一个真正的列表,像这样:latest_entry_ids = list(Entry.objects.filter(is_published=True)\ .order_by('-date_published') .values_list('id', flat=True)[:10])
- mrroot5