避免为特定查询自定义管理器的方法



我有以下问题:我正在处理一个成长的项目,该项目使用覆盖管理器中get_queryset()方法的模式。

# Model declaration
class MyModel(models.Model):
...
objects = MyModelManager()

# Manager declaration
class MyModelManager(models.Manager):
def get_queryset(self):
return super(MyModelManager, self).get_queryset().exclude(is_visible=False)

当您使用django-ORM时,这会导致一些记录基本上不可见。

我现在需要在某些边缘情况下使用基本的get_queryset()方法,而不是使用自定义方法。

我可以清理和更改所有的代码,但这将是一项艰巨的工作。

所以我的问题是:有没有一种方法可以生成像MyModel.objects.all()这样的查询,并避免使用自定义管理器方法

希望我把我的观点讲得足够清楚。

谢谢,
Ron

您可以将多个管理器添加到您的模型中。例如:

class MyModelManager(models.Manager):
def get_queryset(self):
return super(MyModelManager, self).get_queryset().exclude(is_visible=False)

class MyModel(models.Model):
# …
objects = MyModelManager()
all_objects = models.Manager()

如果需要所有对象,则可以使用MyModel.all_objects.all()访问这些对象。

您可以使用另一个不覆盖get_queryset((方法的自定义管理器,如果您使用不同的名称,则更好的做法是使用公共对象名称,因为您只需要定义一次自定义管理器。

最新更新