2012-04-10 13 views
7

Situación: Tengo un formulario que se utiliza para la búsqueda y devuelvo el mismo formulario en la página de resultados para que el usuario filtre sus resultados. Para deshacerse de la entrada de basura, he implementado un método clean_xxx.Mejores prácticas de Django: Cómo limpiar y representar un formulario

Desafortunadamente, el formulario se devuelve en la página de resultados con la entrada de basura aunque se haya limpiado. ¿Cómo puedo obtener la información limpia para mostrar?

Aquí están algunas ideas:

  1. En el método clean_xxx, establecer el valor self.data.xxx = cleaned_xxx
  2. Fecha un nuevo formulario con el 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... 
    } 

Gracias por su ayuda.

+6

Muestre su código: http://sscce.org/ – Marcin

+0

La reinicialización parece lo suficientemente buena. La primera opción es un truco desde algún punto. – ilvar

+0

@Marcin He simplificado mi código para que lo revises – Naqeeb

Respuesta

1

Lo que devuelva de un método clean_xxx es lo que se mostrará. Así, por ejemplo:

forms.py:

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

En el ejemplo anterior el campo dirá "correo no deseado y los huevos".

Si no hace eso, entonces las probabilidades son que el problema está en la lógica de validación de su método.

+0

La función clean_q funciona bien pero el problema es que devuelvo el mismo search_form una vez que se ha validado y q es el mismo. Por ejemplo: q = Stackoverflow()()() clean_q = Stackoverflow El formulario muestra q como Stackoverflow()()(). ¿Hay una mejor manera de mostrar la clean_data q en la página? – Naqeeb

Cuestiones relacionadas