Django文档声明我们可以使用manager的get_queryset方法覆盖默认查询集。
如果我使用models.Queryset和as.manager方法来避免重复的方法怎么办?如何覆盖默认查询?
似乎是模型的get_queryset方法。在这种情况下,查看似乎并不起作用。
感谢。
答案 0 :(得分:3)
您可以使用Manager
和QuerySet
的组合来实现此目标,如下所示:
# model_managers.py
class CustomManager(models.Manager):
""" Enables changing the default queryset function. """
def get_queryset(self):
# Here you can change the default queryset function
return super(CustomManager, self).get_queryset(example_field=True)
class CustomQuerySet(models.QuerySet):
""" Include additional queryset functions. """
def example_filter(self):
return self.filter(other_field=False)
# models.py
class YourModel(models.Model):
# Override the default manager
objects = CustomManager.from_queryset(CustomQuerySet)() # The pair of empty parenthesis is required!
然后你可以在任何地方使用它:
# Will filter `example_field`
YourModel.objects.all()
# Will filter `example_field` and `other_field`
YourModel.objects.example_filter()
答案 1 :(得分:0)
您可以通过继承models.Manager来创建管理类,然后您可以定义自己的查询集方法。
在model.py中,我们应该将class赋值为以下给出的属性:example = ExampleManager()
现在我们可以使用example而不是对象,并可以调用相应的ExampleManager方法。
答案 2 :(得分:0)
你应该展示你尝试过的没有用的东西。
但是,你只需要使用该调用在模型中定义自己的经理:
class MyModel(models.Model):
...
objects = MyQuerySet.as_manager()