根据网址参数过滤所有查询

时间:2014-08-25 18:48:49

标签: django

我在Django项目中根据以下语法编写了所有url:

/ID_PROGRAM/ID_PROJECT/blablabla

我希望默认情况下我的所有查询都有以下过滤器:

.filter(program=ID_PROGRAM).filter(project=ID_PROJECT)

如何自动将这些过滤器应用于我的所有查询?我的想法是定义一个新的manager。但是manager是否能够访问url parameters?我这是最好的办法吗?

为了解决问题,我希望丰富我的所有查询,而不必将视图参数显式传递给管理器。

2 个答案:

答案 0 :(得分:2)

您可以尝试一下,看它是否有效。

是的,经理确实接受参数

class MyModelManager(models.Manager):
    def my_filters(self, id_prog, id_proj):
        return super(MyModelManager, self).get_query_set().filter(program=id_prog, project=id_proj) 

并在视图中:

MyModelManager.objects.my_filters(id_prog, id_proj)

custom managers

上的文档

答案 1 :(得分:1)

  

Python推广"明确比隐含"

更好

karthikr 几乎是对的,但您也可以使用:

1 - 你的函数上面的装饰器。 Decorator将从url获取args并将对象放入任何变量

2 - 写一下mixin,并查看它。 Mixin将在覆盖dispatch的情况下从url获取args并将过滤结果保存到self.custom_context。覆盖get_context_data以合并上下文。