2016-05-10 4 views
0

私はこことDjangoで新しいです。しかし、私はあなたの助けが必要です:)Djangoは提出後のフィールド値を更新します

私はListViewコントロールを使用して、検索ページ、FormMixinクラスとシンプルなFormViewコントロール作成しました:

class Search(ListView,FormMixin): 
    template_name = "users/search.html" 
    form_class = SearchForm 

    def get_context_data(self,**kwargs): 
    """To get results""" 

    def post(self, request, *args, **kwargs): 
    return SearchFormView.as_view()(request) 

そして

class SearchFormView(FormView): 
    template_name = 'users/search.html' 
    form_class = SearchForm 

    def get_success_url(self): 
    return reverse_lazy('users:search') 

    def get_initial(self): 
    if 'keySearch' in self.request.session: 
     for k in self.request.session.pop('keySearch'): 
     initial[k] = self.request.session.pop(k) 

    return initial 

    def form_valid(self, form): 
     print "Form valid" 
     request = form.cleaned_data 
     print "Search field {}".format(request) 
     for k,v in request.iteritems(): 
     self.request.session[k]=v 
     self.request.session['keySearch']=request.keys() 
     return super(SearchFormView,self).form_valid(form) 

をしかし毎回、私がフォームを送信し、 「検索」フィールドは空白にされます。私の目的は、フィールド内にユーザーの入力を保持し、キーワードと結果を同時に表示することです。私は良い方法でget_initialメソッドを使用していないと思います。

また、この汚れたコードは申し訳ありません。私はあなたが解決し、任意のコメントは素晴らしいことだと思っている:)

敬具

+0

空のフォームを事前に入力して、ユーザーに送信する必要があります。 'form 'data' {' form_field ':' prefilled_form_field_data '} ''フォーム= YourForm(初期=フォームデータ) ''リターンレンダリング(リクエスト、 "template.html"、{'フォーム ':フォーム}) ' – rwx

答えて

0

あなたはそれが便利だ場合には、このようにそれを試みることができる、あなたがテンプレートをレンダリングする際にフォームの値を割り当て、それらを再度送信する必要があります。

class SearchFormView(View): 
    template_name='users/search.html' 

    def get(self, request, *args, **kwargs): 
     valid_form = yourForm() 
     return render(request, self.template_name,{ 
                "valid_form" : valid_form, 

                }) 
関連する問題