2012-04-10 28 views
7

Tình huống: Tôi có biểu mẫu được sử dụng cho tìm kiếm và tôi trả về cùng một biểu mẫu trên trang kết quả để người dùng lọc kết quả của họ. Để loại bỏ đầu vào rác, tôi đã thực hiện một phương thức clean_xxx.Thực tiễn tốt nhất Django: Cách làm sạch và hiển thị biểu mẫu

Thật không may, biểu mẫu được trả lại trên trang kết quả với đầu vào rác ngay cả khi nó được làm sạch. Làm thế nào tôi có thể nhận được dữ liệu sạch sẽ để hiển thị?

Dưới đây là một vài ý tưởng:

  1. Trong phương pháp clean_xxx, thiết lập các self.data.xxx = giá trị cleaned_xxx
  2. reinitialize một hình thức mới với cleaned_data.

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... 
    } 

Nhờ sự giúp đỡ của bạn.

+6

Hiển thị mã của bạn: http://sscce.org/ – Marcin

+0

Bắt đầu lại có vẻ đủ tốt. Tùy chọn đầu tiên là một hack từ một số điểm. – ilvar

+0

@Marcin Tôi đã đơn giản hóa mã của tôi để bạn có thể xem xét – Naqeeb

Trả lời

1

Bất kể bạn trở về từ phương thức clean_xxx là gì sẽ được hiển thị. Vì vậy, ví dụ:

forms.py:

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

Trong ví dụ trên lĩnh vực này sẽ nói "thư rác và trứng".

Nếu không thực hiện điều đó, thì tỷ lệ cược là sự cố trong logic xác thực của phương thức của bạn.

+0

Hàm clean_q hoạt động tốt nhưng vấn đề là tôi trả về cùng một search_form khi nó đã được xác thực và q là như nhau. Ví dụ: q = Stackoverflow()()() clean_q = Stackoverflow Biểu mẫu hiển thị q là Stackoverflow()()(). Có cách nào tốt hơn để hiển thị clean_data q trên trang không? – Naqeeb

Các vấn đề liên quan