[Python] Django:递增的博客条目查看次数为1。 这是否有效?


Answers

您可以在单个事务中处理更新,这可以显着提高性能。 使用一个单独的函数,用@ transaction.commit_manually装饰。

@transaction.commit_manually
def update_latest_entries(latest_entry_list):
    for entry in latest_entry_list:
        entry.views += 1
        entry.save()
    transaction.commit()
Question

我在我的索引视图中有以下代码。

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“聪明”足以发出一个更新调用?

有没有一个更有效的方法来实现这个结果?




如果你真的需要这个效率的话,那么现在你不得不下降到SQL并且自己运行这个更新。 尽管如此,这不值得增加复杂性。

通过Django 1.1,您可以通过ORM使用F()对象在更新值中引用字段,在单个SQL调用中执行此操作。