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() ビューから)...

私もこれをやってみました:

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)

しかし、私のフォームは、定義されていないものに関するあらゆる種類のエラーを私に与えました。

過去数日間で 50 の異なるブログ、ドキュメント ページ、スタック オーバーフローの投稿などを読んだに違いありません。ここで壁に頭をぶつけています。

4

0 に答える 0