我的Django模型在delete
方法中有自定义逻辑。因此,为了确保这个逻辑is called when I call delete on my queryset
,我写了自己的queryset
删除。
class MyQuerySet(QuerySet):
# Do we have to be any fancier here?
def delete(self):
for m in self:
m.delete()
我的问题是,除了在每个实例上迭代并调用delete
之外,我还有什么比这更好的了吗?
答案 0 :(得分:1)
您应该清除结果缓存,以便重新使用查询集,然后再次评估数据库查询。
此外,您还必须设置两个属性:
alters_data=True
阻止从模板调用此方法; queryset_only=True
将此方法隐藏在用作管理器的查询集中。
class MyQuerySet(QuerySet):
def delete(self):
for m in self:
m.delete()
self._result_cache = None
delete.alters_data = True
delete.queryset_only = True