根据用户配置文件元素更改django haystack搜索视图

时间:2012-09-30 00:09:00

标签: python django django-haystack

所以,我已经在这里和其他地方读过,我看到人们加载不同的html模板,或者在模板中做一些事情来改变显示的内容,但我想要做的是加载不同的视图或基于用户个人资料中的元素形成。

我的urls.py看起来像这样:

urlpatterns = patterns('',
    url(r'^$', MySearchView(
        searchqueryset=sqs,
        form_class=BasicPropertySearchForm
    ), name="haystack_search"),
)

我可以设置行

form_class=
手动

到BasicPropertySearchForm或PaidPropertySearchForm,相应的搜索页面将正确加载并运行,没问题。

但我想做的是自动生成form_class,以便根据用户个人资料加载BasicPropertySearchForm或PaidPropertySearchForm。

我尝试在视图中使用request.user.get_profile()完成此操作:

class MySearchView(SearchView):
#extends the default haystack SearchView
    def which_view(self):
        if self.request.user.get_profile().is_paid:
            return PaidPropertySearchForm
        else:
            return BasicPropertySearchForm    

并改变

form_class=MySearchView().which_view

但是会导致错误

which_view() takes exactly 1 argument (4 given)

我尝试了很多其他变体,包括使用一个不在views.py类中的方法,在urls.py中执行if语句(由于我想象我必须访问request.user.get_profile()来自视图)...

我也试过这样做:

urls.py:

urlpatterns = patterns('',
   url(r'^$', 'property_listings.views.search_views', name="haystack_search"),
)

和views.py:

def search_views(request, *args, **kwargs):

    sqs = SearchQuerySet().all

    if request.user.get_profile().is_paid:
        return SearchView(
            searchqueryset=sqs,
            form_class=PaidPropertySearchForm
        )(request, *args, **kwargs)
    else: 
        return SearchView(
            searchqueryset=sqs,
            form_class=BasicPropertySearchForm
        )(request, *args, **kwargs)

然后我的表单给了我关于未定义的东西的各种错误,例如self.searchqueryset.all(),对于那个或其他东西都不存在..

任何帮助将不胜感激,我必须在过去几天阅读50个不同的博客,文档页面,堆栈溢出帖子等等,我在这里碰到了一堵墙。

0 个答案:

没有答案