基于用户配置文件elemen更改Django haystack搜索视图

2024-10-03 17:17:07 发布

您现在位置:Python中文网/ 问答频道 /正文

所以,我读过这里和其他地方,我看到人们加载不同的html模板,或者在模板本身中做一些事情来改变显示的内容,但是我想做的是根据用户配置文件中的元素加载不同的视图或表单。在

我的网址.py看起来像这样:

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

我可以定线

^{pr2}$

手动执行BasicPropertySearchForm或PaidPropertySearchForm,相应的搜索页面将正确加载并正常工作,没有问题。在

但是我想做的是让form_类自动化,这样它就可以根据用户配置文件加载BasicPropertySearchForm或PaidPropertySearchForm。在

我试着用request.user.get_配置文件()在这样的视图中:

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)

我尝试过许多其他变体,包括使用不在类中的方法视图.py,在网址.py(我意识到这是行不通的,因为我认为我必须访问request.user.get_配置文件()没有视图。。。在

我也试过这样做:

在网址.py公司名称:

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

以及视图.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个不同的博客,博士页面,堆栈溢出的帖子,等等,在过去的几天里,我的头撞到了墙上。。在


Tags: pyform视图searchgetreturnrequest配置文件