【发布时间】:2017-10-22 21:27:00
【问题描述】:
在我的 Django 项目中,我的数据库的每个表中都有一个 is_active 布尔列。每次我或框架访问数据库时,我只想显示活动记录。实现这一目标的标准方法是什么?当然,我不想在每个查询中检查is_active。
【问题讨论】:
-
使用模型管理器
标签: python django database django-models django-rest-framework
在我的 Django 项目中,我的数据库的每个表中都有一个 is_active 布尔列。每次我或框架访问数据库时,我只想显示活动记录。实现这一目标的标准方法是什么?当然,我不想在每个查询中检查is_active。
【问题讨论】:
标签: python django database django-models django-rest-framework
最简单的方法是创建一个自定义模型管理器,如下所示:
class OnlyActiveManager(models.Manager):
def get_queryset(self):
return super(OnlyActiveManager, self).get_queryset().filter(is_active=True)
然后,将其添加到您的模型中:
class MyModel(models.Model):
objects = models.Manager()
active = OnlyActiveManager()
接下来,像这样使用它:
foo = MyModel.active.all()
您也可以使用它来替换默认管理器(称为objects),但是您必须执行自定义查询才能获取所有不活动的记录。
【讨论】:
你可以为你的模型写一个管理器类,下面给出一个示例模型管理器,更多可以参考Django官网
class MediaManager(models.Manager):
def get_queryset(self):
return MediaQuerySet(self.model, using=self._db)
def active(self):
return self.filter(is_active=True)
class Media(models.Model):
(..model fields..)
objects = MediaManager()
查询应该是这样的
media = Media.objects.active()
【讨论】:
您可以使用 django 模型管理器来完成。
详情请查看 django 文档django documentaion
【讨论】: