Django文档状态,我们可以使用manager的get_queryset方法覆盖默认的查询集。
如果我使用models.Queryset和as.manager方法来避免重复的方法,该怎么办?如何覆盖默认查询?
在这种情况下,get_queryset models.Queryset方法似乎不起作用。
谢谢。
发布于 2018-02-05 06:46:42
您可以使用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()
发布于 2017-09-10 21:36:02
您可以通过继承models.Manager创建manage类,然后可以定义您自己的查询集方法。
在model.py中,我们应该将类赋值为属性,如下所示:
示例= ExampleManager()
现在,我们可以使用示例而不是对象,并可以调用相应的ExampleManager方法。
发布于 2017-09-10 23:16:38
你应该展示一下你尝试过的那些没用的东西。
但是,您只需要使用该调用在模型中定义您自己的经理:
class MyModel(models.Model):
...
objects = MyQuerySet.as_manager()
https://stackoverflow.com/questions/46145771
复制相似问题