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

django - Way to avoid custom manager for specific queries

我遇到以下问题:我正在开发一个使用覆盖管理器中的 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() 并避免使用自定义管理器方法?

希望我的观点足够清楚。

谢谢,
罗恩

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

class MyModelManager(models.Manager):

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


class MyModel(models.Model):
    # …

    objects = MyModelManager()
    <b>all_objects = models.Manager()</b>

如果您随后需要 所有 对象,您可以使用 MyModel.<b>all_objects[=21= 访问这些对象.all().

您可以使用另一个不会覆盖 get_queryset() 方法的自定义管理器,如果您使用不同的名称然后您拥有的常用 objects 名称会更好只定义一次自定义管理器。