Django HayStack从URL获取参数并相应地更新默认查询

时间:2015-04-16 16:50:57

标签: python django solr django-urls django-haystack

我已经在django中使用haystack + solar实现了搜索功能,现在的情况是我有另一个页面,它将使用相同的功能但只有一个区别。

1st module - http://127.0.0.1:8000/users/

模块显示所有注册用户,然后搜索在此模块上运行,

2nd module - http://127.0.0.1:8000/users/46000/

现在将做什么,它将首先过滤来自城市代码46000的所有用户,然后搜索将在其上运行。

现在我想知道如何使用相同的模块或继承模块1或任何其他想法来最小化代码?

我想要的是在模块1上,我可以检查是否有url parameter然后更新默认查询吗?这该怎么做 ?

我所做的是

def __call__(self, request, city_code = None):
        if city_code == None:
            print 'taqi'
        else:
            print city_code

对于http://127.0.0.1:8000/users/,它会在控制台和http://127.0.0.1:8000/users/46000/

上打印taqi

city_code的{​​{1}}类的saerch_view方法得到此值,但现在将此值传递给search_view_factory

1 个答案:

答案 0 :(得分:3)

我认为您应该使用其中一个Haystack通用视图 - http://django-haystack.readthedocs.org/en/latest/views_and_forms.html#new-django-class-based-views

代码如下:

from haystack.generic_views import SearchView

class MySearchView(SearchView):

    def get_queryset(self):
        queryset = super(MySearchView, self).get_queryset()
        city_code = self.kwargs.get('city_code')
        if city_code:
            return queryset.filter(city_code=city_code)
        return queryset


# urls.py

urlpatterns = patterns('',
    url(r'^/users/$', MySearchView.as_view()),
    url(r'^/users/(?P<city_code>\d+)/$', MySearchView.as_view())
)