我正在为我的Django项目构建软删除功能。我已经使用自定义模型管理器实现了此操作(即,对get_queryset()执行初始过滤,以及覆盖Model/Manager/QuerySet delete()

Django说明文件(1.11):



我的具有软删除权限的管理器当前是模型的默认管理器(在模型类上声明的第一个管理器)。它还已分配给objects

这对我来说很方便,因为许多Django代码都使用默认的模型管理器(例如,如果您的MultipleObjectMixin.get_queryset()-继承MultipleObjectMixin仅定义了View属性,则为model)。

但是dumpdata也使用自定义模型管理器的事实使我感到恐惧,并让我考虑了设置默认模型管理器的其他未知意外后果。如果执行manage.py dumpdata,我希望将软删除的模型包含在转储中。因此,我开始怀疑自己在覆盖默认模型管理器以筛选可用记录时所做出的选择。

同时,我很欣赏设置默认模型管理器给我带来的便利(对通用CBVs.etc的零努力支持),如果可能的话,我希望对其进行维护。

解决此问题的最佳方法是什么?

最佳答案

按照此documentation的要求,如果您运行./manage.py dumpdata -a./manage.py dumpdata --all,它将使用默认管理器而非自定义管理器转储数据。如果要使用默认管理器而不是自定义管理器(不更改模型),则可以尝试如下操作:

objects = YourModel._base_manager
objects.all()

关于python - 我的软删除荣誉模型管理员应该成为我模型的默认管理员吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53536989/

10-10 00:16
查看更多