gpt4 book ai didi

python - 我的软删除荣誉模型管理器应该是我模型的默认管理器吗?

转载 作者:太空狗 更新时间:2023-10-29 18:08:28 26 4
gpt4 key购买 nike

我正在为我的 Django 项目构建软删除功能。我已经使用自定义模型管理器实现了这一点(即对 get_queryset() 执行初始筛选,并覆盖 Model/Manager/查询集 delete().

Django 文档 (1.11):

If you use custom Manager objects, take note that the first Manager Django encounters (in the order in which they’re defined in the model) has a special status. Django interprets the first Manager defined in a class as the “default” Manager, and several parts of Django (including dumpdata) will use that Manager exclusively for that model. As a result, it’s a good idea to be careful in your choice of default manager in order to avoid a situation where overriding get_queryset() results in an inability to retrieve objects you’d like to work with.

我的软删除荣誉管理器目前是我模型的默认管理器(在模型类上声明的第一个管理器)。它还分配给对象

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

然而,dumpdata 使用自定义模型管理器这一事实让我感到害怕,并让我开始思考设置默认模型管理器的其他未知意外后果。如果我执行 manage.py dumpdata,我希望我的软删除模型包含在转储中。因此,我开始怀疑自己是否选择覆盖默认模型管理器来过滤可用记录。

与此同时,我很感激设置默认模型管理器给我带来的便利(对通用 CBV 等的零努力支持),如果可能的话我想保持这种便利。

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

最佳答案

根据这个documentation ,如果您运行 ./manage.py dumpdata -a./manage.py dumpdata --all,那么它将使用默认管理器而不是自定义管理器转储数据。如果您想使用默认管理器而不是自定义管理器(不更改模型),那么您可以这样尝试:

objects = YourModel._base_manager
objects.all()

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com