我是Django的新手,我需要清理所有现有的满足某些条件的对象,这些条件是由进口商先前创建的,在进口商重新运行之前。
我正在尝试找出最有效的方法。目前,在导入新对象并使用布尔值to_be_deleted=True
更新它们之前,我正在获取现有对象:
Thing.objects.filter(source=importer).update(to_be_deleted=True)
import_new_things(source=importer)
Thing.objects.filter(to_be_deleted=True).delete()
但是我真的需要在整个查询集上运行更新吗?有没有一种方法可以将查询集的快照保存到变量中,然后在导入程序完成后将其删除?
答案 0 :(得分:2)
要保存查询集的“快照”,您只需获取ID列表即可。
# Get all the objects IDs
current_object_ids = list(Thing.objects.filter(source=importer).values_list('id', flat=True))
然后您可以调用函数,如果成功,则可以删除其他对象。
try:
import_new_things(source=importer)
except:
# do something
else:
# Run your delete
Thing.objects.filter(id__in=current_object_ids).delete()