2012-04-10 17 views
7

状況:検索に使用するフォームがあり、ユーザーが結果ページをフィルタリングするために結果ページに同じフォームを返します。ガベージ入力を取り除くために、私はclean_xxxメソッドを実装しました。Djangoベストプラクティス:フォームのクリーンアップとレンダリング方法

残念ながら、フォームはクリーニングされてもガベージ入力とともに結果ページに返されます。きれいなデータを表示するにはどうすればいいですか?ここで

はいくつかのアイデアです:clean_xxx方法で

  1. 、再初期化に
  2. cleaned_dataで新しいフォームをself.data.xxx = cleaned_xxx値を設定します。

forms.py:あなたの助けを

SearchForm: 
    def clean_q(self): 
    q = self.cleaned_data.get('q').strip() 
    # Remove Garbage Input 
    sanitized_keywords = re.split('[^a-zA-Z0-9_ ]', q) 
    q = "".join(sanitized_keywords).strip() 

    #TODO: Fix 
    self.data['q'] = q 

    return q 

views.py

search_form = SearchForm(params, user=request.user) 
    if search_form.is_valid(): 
     # Build the Query from the form 
     # Retrieve The Results 

    else: 
     # For errors, no results will be displayed 
     _log.error('Search: Form is not valid. Error = %s' %search_form.errors) 

    response = { 
       'search_form': search_form... 
    } 

感謝。

+6

コードを表示:http://sscce.org/ – Marcin

+0

再初期化で十分です。最初のオプションは、ある点からのハックです。 – ilvar

+0

@Marcin私はあなたのためにコードを簡素化しました – Naqeeb

答えて

1

clean_xxxメソッドから返ったものが表示されます。したがって、たとえば:

forms.py:

class SearchForm(forms.Form): 
    def clean_q(self): 
     return "spam and eggs" 

上記の例では、フィールドは、 "スパムと卵を" と言うだろう。

もしそうでなければ、メソッドの検証ロジックに問題がある可能性があります。

+0

clean_q関数はうまく動作しますが、問題は、検証され、qが同じであれば、同じsearch_formを返すことです。 例:q = Stackoverflow()()() clean_q = Stackoverflow フォームはStackoverflow()()()としてqを表示します。ページ上にcleaned_data qを表示するには、より良い方法がありますか? – Naqeeb

関連する問題