【问题标题】:Selecting only active records django query仅选择活动记录 django 查询
【发布时间】:2017-10-22 21:27:00
【问题描述】:

在我的 Django 项目中,我的数据库的每个表中都有一个 is_active 布尔列。每次我或框架访问数据库时,我只想显示活动记录。实现这一目标的标准方法是什么?当然,我不想在每个查询中检查is_active

【问题讨论】:

  • 使用模型管理器

标签: python django database django-models django-rest-framework


【解决方案1】:

最简单的方法是创建一个自定义模型管理器,如下所示:

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),但是您必须执行自定义查询才能获取所有不活动的记录。

【讨论】:

    【解决方案2】:

    你可以为你的模型写一个管理器类,下面给出一个示例模型管理器,更多可以参考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()
    

    【讨论】:

      【解决方案3】:

      您可以使用 django 模型管理器来完成。

      详情请查看 django 文档django documentaion

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-02-14
        • 2014-02-25
        • 1970-01-01
        • 1970-01-01
        • 2012-08-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多