如何将自定义管理器添加到第三方应用程序的模型
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
经理。您将需要 makemigrations
和 migrate
,因为将为 Message
.
创建一个新的 table
我在所有模型中添加了 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
经理。您将需要 makemigrations
和 migrate
,因为将为 Message
.