通过将经理添加到模型中,我能够完成我想要的。我还创建了一个抽象基类,以便更轻松地将其添加到其他模型而无需复制相同的代码 - 这是修改后的示例:
class MyActiveManager(models.Manager):
def get_queryset(self):
return super(MyModelManager, self).get_queryset().filter(active=True)
class MyInactiveManager(models.Manager):
def get_queryset(self):
return super(MyModelManager, self).get_queryset().filter(active=False)
class AbstractModel(models.Model):
timestamp = models.DateTimeField(default=datetime.utcnow)
active = models.BooleanField(default=True)
objects = MyActiveManager()
objects_inactive = MyInactiveManager()
objects_all = models.Manager()
class Meta:
abstract = True
ordering = ['-timestamp']
class MyModel(AbstractModel):
# Define active-enabled model here
现在,我想拥有“活动”(在本例中为“时间戳”)字段的任何模型都可以从基本模型继承。当我使用 MyModel.objects.all() - 我得到所有具有 active=True 的对象 - 如果我已经有很多使用对象管理器的代码,这将特别有用。如果我只想要非活动结果,我使用 MyModel.objects_inactive.all(),如果我想要所有记录而不考虑 active 的值,我使用 MyModel.objects_all.all()