2016-05-10 66 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'}''form = YourForm(initial = form_data)''return render(request,「template.html」,{'form':form})' – 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, 

                })