如何将自定义管理器添加到第三方应用程序的模型

How to Add custom manager to third-party app's model

我在所有模型中添加了 is_active 字段以添加软删除功能,并添加了自定义管理器以获取活动对象

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


class Student(models.Model):
    is_active = models.BooleanField(default=True)
    active_objects = SoftDeleteManager()
    objects = models.Manager()

此外,我也想在 auth.User 模型上添加相同的 active_objects 管理器,但由于我的代码库中未定义此模型,我不确定如何进行。

假设:您想软删除任何 具有 is_active 字段的第 3 方模型。它不应该是 auth.User 模型,因为那是一个特例。

我首先创建一个抽象模型 class 来实现软删除行为:

class SoftDeleteModel(models.Model):
    is_active = models.BooleanField(default=True)

    active_objects = SoftDeleteManager()
    objects = models.Manager()

    class Meta:
        abstract = True

现在假设您有一个带有模型 Message 的第 3 方应用程序,然后在您的应用程序中,您可以子class 它:

from 3rdparty.models import Message as ExtMessage
from .models import SoftDeleteModel

class Message(SoftDeleteModel, ExtMessage):
    pass

现在您自己的 Message class 拥有额外的字段和 active_objects 经理。您将需要 makemigrationsmigrate,因为将为 Message.

创建一个新的 table