【发布时间】:2021-01-27 16:51:18
【问题描述】:
假设我有一个模型:
class Car(models.Model):
name = models.CharField(max_length=50)
is_active = models.BooleanField(default=True)
当我查询 Car 时,我总是希望返回满足 is_active=True 的对象。 为此,在 StackOverFlow 上搜索,我发现我最好的选择是使用 ModelManager,如下所示:
class CarManager(models.ModelManager):
def get_queryset(self):
return super().get_queryset().filter(is_active=True)
并且,在我的模型中使用这个 Manager。
class Car(models.Model):
name = models.CharField(max_length=50)
is_active = models.BooleanField(default=True)
objects = CarManager()
使用此解决方案始终返回活动的 Car 查询集。 但是,有时我也想返回非活动的 Car 查询集,我不想编写另一个 ModelManager。
详细说明,
-
当我跑步时,
汽车.objects.all() 或者,
Car.objects.filter(name__contains='Car') 或者,
Car.objects.filter(is_active=True)
我只想要活动的 Car 查询集。
-
当我跑步时,
Car.objects.filter(is_active=False)
我想要非活动的 Car 查询集。
而且,我想使用单个 ModelManager 和默认方法(get、filter、all 等)来实现这一点。为什么我想要这个是因为它已经在很多地方被使用了。
那么,有什么办法可以做到这一点吗?欢迎任何建议或见解。
提前感谢您的帮助。
【问题讨论】: