我想做的是创建一个
QuerySet
所有的物体
匹配最终列表。然后检查需要创建、更新和删除哪些模型对象。然后(理想情况下)以最少的事务数执行更新。并且不执行任何不必要的DB操作。
使用
create_or_update
让我大部分的路去做我想做的事。
jobs = get_current_jobs(host, user)
for host, user, name, defaults in jobs:
obj, _ = Job.upate_or_create(host=host, user=user, name=name, defaults=defaults)
这种方法的问题是它不会删除任何不再存在的内容。
to_delete = set(Job.objects.filter(host=host, user=user)) - set(current)
(这是一种选择)但我觉得肯定已经有一个优雅的解决方案,既不需要删除所有内容,也不需要将所有内容读入内存。