我正在构建一个Django应用,该应用将定期从外部来源获取信息,并使用它来更新模型对象。
我想做的是创建一个QuerySet
,其中包含所有可能与最终列表匹配的对象。然后检查哪些模型对象需要创建,更新和删除。然后(理想情况下)以最少的事务数执行更新。并且无需执行任何不必要的数据库操作。
使用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)
(这是一个选择),但我觉得必须已经有了一个优雅的解决方案,不需要删除所有内容或将所有内容读取到内存中。
答案 0 :(得分:1)