2012-04-10 27 views
7

Durum: Arama için kullandığım bir form var ve sonuçların filtrelenmesi için sonuç sayfasında aynı formu döndürüyorum. Çöp girişinden kurtulmak için bir clean_xxx yöntemi uyguladım.Django En İyi Uygulamalar: Bir form nasıl temizlenir ve oluşturulur

Maalesef, form temizlenmiş olmasına rağmen sonuç sayfasında çöp girişiyle döndürülür. Görüntülenecek temiz verileri nasıl alabilirim? , Self.data.xxx = cleaned_xxx değeri

  • Reinitialize cleaned_data ile yeni bir form clean_xxx yöntemde

    1. seti: Burada

      birkaç fikir.

    forms.py: Yardımlarınız için

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

    teşekkürler.

  • +6

    Kodunuzu göster: http://sscce.org/ – Marcin

    +0

    Sıfırlama yeterince iyi görünüyor. İlk seçenek bir noktadan kesmek. – ilvar

    +0

    @Marcin – Naqeeb

    cevap

    1

    Bir clean_xxx yönteminden ne döndüğünüz her neyse, görüntülenecektir. Yani, örneğin:

    forms.py: alanına "spam ve yumurta" diyecekler Yukarıdaki örnekte

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

    .

    Bunu yapmazsa, o zaman sorun, yönteminizin doğrulama mantığıdır.

    +0

    clean_q işlevi iyi çalışıyor ancak sorun doğrulandıktan ve aynı q olduğunda aynı search_form değerini döndürmem. Örneğin: q = Stackoverflow()()() clean_q = Yığınlama akışı Form, q yığınını Stackoverflow()()() olarak görüntüler. Clean_data q sayfasını sayfada görüntülemek için daha iyi bir yol var mı? – Naqeeb

    İlgili konular