查询集上的自定义删除方法

时间:2015-03-18 16:44:23

标签: django django-models django-queryset

我的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之外,我还有什么比这更好的了吗?

1 个答案:

答案 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