2

所以,我在这里和其他地方读过,我看到人们加载不同的 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语句(我意识到这不起作用,因为我想象我必须访问请求。 user.get_profile() 从视图中)...

我也试过这样做:

网址.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() all does not exist for that or something or another..

任何帮助将不胜感激,在过去的几天里,我一定已经阅读了 50 个不同的博客、文档页面、堆栈溢出帖子等,而且我在这里撞墙了。

4

0 回答 0