simple por peticiones form enviar ejemplo better ajax django forms widget

ajax - por - forms django



Django: artilugio personalizado con "¿quiso decir?" Consejos basados ​​en la validación (1)

  1. Preferiría que se muestre la lista "¿Quiso decir?" Sin tener que volver a cargar la página.

Crear widget personalizado, que se representa con código JS para verificar posibles valores a medida que el usuario lo ingresa

  1. Si un usuario hace clic en una de las sugerencias, quiero realizar la acción del formulario sin una búsqueda adicional: el valor ya ha sido marcado.

De nuevo, ese widget, cuando se hace clic, solo debe enviar el formulario.

  1. Quiero mantener toda la lógica fuera de la vista y mantenerla en la forma o en el modelo. Es un requisito.

En el formulario, tendrá el método clean () para validar todo. Si, por ejemplo, pasan algunos datos falsos con submit from p. 2 - aún aumenta el error de validación.

  1. Quiero evitar JS codificados en la plantilla e insertarlos en la forma si es posible. No es obligatorio.

Resuelto con widget personalizado, detalles .

Tengo un modelo básico:

class MyModel(models.Model): my_field = models.CharField()

Tengo una forma básica para este modelo:

class MyFrom(forms.ModelForm): class Meta: model = MyModel

Y tengo una función que hace una búsqueda básica (mucho más compleja en realidad, regex etc. no funciona):

POSSIBLE_VALUES = [''aa'', ''bb'', ''cc'', ''dd''] def lookup(some_value): if some_value in POSSIBLE_VALUES: # the value is OK, return a string return some_value else: # constructs the ''did you mean'' list of suggestions didyoumean = [pv for pv in POSSIBLE_VALUES if pv in some_value] # returns a list which might be empty return didyoumean

Ahora, el escenario que quiero es:

  1. En el sitio, ingreso un valor en el campo de entrada "mi_campo" y presiono el botón de enviar.
  2. Si el valor pasa la búsqueda, debería realizar automáticamente la acción del formulario.
  3. Si obtengo múltiples valores posibles, entonces debería mostrarlos al usuario y no se realiza ninguna otra acción.
  4. Si no obtengo respuestas (una lista vacía) debería recibir un mensaje de error.

Algunos requisitos adicionales:

  1. Preferiría que se muestre la lista "¿Quiso decir?" Sin tener que volver a cargar la página.
  2. Si un usuario hace clic en una de las sugerencias, quiero realizar la acción del formulario sin una búsqueda adicional: el valor ya ha sido marcado.
  3. Quiero mantener toda la lógica fuera de la vista y mantenerla en la forma o en el modelo. Es un requisito.
  4. Quiero evitar JS codificados en la plantilla e insertarlos en la forma si es posible. No es obligatorio.

Por lo tanto, supongo que todo se distribuirá entre esta validación de campos y un widget personalizado que manejaría la representación de la lista "¿quisiste decir?". No puedo poner todo junto.

Tu ayuda es requerida :)

EDITAR. Anuncio. 2 en requisitos. Esa es una característica básica que describí. En uno más avanzado, quiero que este formulario tenga más campos y, por lo tanto, la lista "¿Quiso decir?" Debería mostrarse junto con todos los demás campos (si corresponde). Luego, al hacer clic en una sugerencia, simplemente establecería el valor de my_field en su valor sin volver a cargar el formulario. Un usuario tendría que corregir otros errores también, así que no puedo ir a la acción del formulario de inmediato. ¿Podría haber alguna bandera para cambiar entre esas dos opciones ("básica" y "avanzada")?