Python 如何在Django中将自定义模型管理器设置为默认模型管理器?

Python 如何在Django中将自定义模型管理器设置为默认模型管理器?,python,django,django-models,Python,Django,Django Models,我在Django项目中有多个应用程序和模型。现在我想在所有应用程序模型中使用自定义模型管理器。我不想在每个模型内部编写自定义模型管理器query。 我只是想知道是否可以将自定义模型管理器设置为所有应用程序的默认模型管理器 manager.py class CustomQuerySet(models.Manager): def get_queryset(self): return super(CustomQuerySet, self).get_queryset().filt

我在Django项目中有多个应用程序和模型。现在我想在所有应用程序模型中使用自定义模型管理器。我不想在每个模型内部编写自定义模型管理器
query
。 我只是想知道是否可以将自定义模型管理器设置为所有应用程序的默认模型管理器

manager.py

class CustomQuerySet(models.Manager):
    def get_queryset(self):
        return super(CustomQuerySet, self).get_queryset().filter(status=True)

您可以设置抽象模型并在所有模型中继承它:

类MyProjectAbstractModel(models.Model):
#常规通用模型字段定期出现在此处
objects=models.Manager()#您可以指定内置的,也可以不指定内置的,为了便于阅读,您还可以将管理器设置为objects属性
my_custom_manager=CustomQuerySet()#您的经理
类元:
abstract=True#表示迁移无法处理此模型
类MyModelInAppOne(MyProjectAbstractModel):
#你的恳求。。。

您可以创建这样的自定义管理器,并覆盖
get\u queryset
方法,也可以添加自己的方法和过滤器

class PublishedManager(models.Manager):
 def get_queryset(self):
 return super().get_queryset().filter(status='published')

class Post(models.Model):
 # ...
 objects = models.Manager() # The default manager.
 published = PublishedManager() # custom manager.

此自定义(PublishedManager)管理器将允许您使用
Post.published.all()检索帖子。
这将使所有帖子的状态都为published

这允许您有两个管理器
对象
,默认管理器和
已发布
,自定义管理器,或者您可以像这样覆盖默认管理器
objects=PublishedManager()