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 名称会更好只定义一次自定义管理器。
我遇到以下问题:我正在开发一个使用覆盖管理器中的 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 名称会更好只定义一次自定义管理器。