preload
Sep 03

pues nada… habiendo tenido la enésima pelea con el sr. django, no es que haya conseguido algo muy meritorio pero bueno… puede ser que a alguien le pueda interesar y dado < ironia >la gran cantidad de documentación y código de ejemplo que hay por internet de django < /ironia > pues me animo a publicarlo.

primero pongamos un poco en antecedentes de cual era la necesidad que yo tenía, como lo tenía hecho antes y como lo he intentado hacer ahora (porque aún no me funciona al 100 % bien como yo quiero).

tengo un tipo de datos llamado “Concepto” el cual tiene asociadas unas “Keywords” y necesitaba que estos Conceptos y sus Keywords asociadas se pudieran duplicar, de forma que se creara una copia a través de la interfaz web con solo hacer un clic, bien en un principio bastó con hacer una copia del objeto y sencillamente redireccionar al formulario de edición con el nuevo concepto duplicado. (si a alguien le interesa esta version le puedo indicar como lo hice, o como estaba hecho) el problema de esta versión es que guarda el nuevo concepto si o si, es decir que si el usuario se lo piensa mejor y realmente no desea guardar ese nuevo concepto duplicado, ya está guardado en la base de datos, por lo cual ya se ha creado.
de ahí surge la necesidad de hacerlo de otra forma, de obtener el formulario de añadir un nuevo concepto y rellenarlo de alguna forma.
se puede hacer de varias formas, con una pequeña trampa que el sr. django se come de maravilla y contento, consiste en rellenarle el diccionario del POST o del GET.
si rellenamos el diccionario del POST, podemos tener problemas, ya que por defecto cuando en nuestro views.py tenemos algo así:
result = django.contrib.admin.views.main.add_stage( request, 'nombreAplicacion', 'concept', False, '','/'+apachePath+'/concept/')
ese método de django que es el que nos muestra el formulario y el mismo nos lo guarda, lo hace mirando si hay una determinada información en el diccionario del POST.
si le rellenamos los valores de los campos del formulario que nosotros de forma automática queremos rellenar mediante POST, nos vamos a encontrar con que directamente nos va a guardar el nuevo concepto duplicado, sin darnos opción a modificar nada, es decir, no nos va a mostrar el formulario para editar.
para hacer que nos deje modificarlo se me ocurrió, usar primero el diccionario del GET, para sugerirle los valores que quiero que se muestren en el formulario y dejar que el resto de la operación transcurra de forma normal, por suerte funcionó :)
viene a quedar algo así:

def duplicateConcept(request,conceptId) :
import django.views.generic.list_detail
import django.contrib.admin.views.main
import django.http
from django.views.generic.simple import redirect_to
from config import apachePath
from database import cargaDatosConcepto, cargaKeywordsConcepto
concepto = cargaDatosConcepto(conceptId)
strinstance = 'name='+concepto[1]+'_copia'
if concepto[2] :
strinstance += '&parent='+str(concepto[2])
keywords = cargaKeywordsConcepto(conceptId)
i = 0
for (key,type) in keywords :
strinstance += '&keyword.' + str(i) + '.keyword=' + key
strinstance += '&keyword.' + str(i) + '.type=' + type
i += 1
request.GET= django.http.QueryDict(strinstance)
result = django.contrib.admin.views.main.add_stage ( request, 'nombreAplicacion', 'concept', False, '', '/'+apachePath+'/concept/')
return result

y con esto conseguimos el efecto deseado, el problema, es que las keywords son una entidad débil de los conceptos, es decir que un concepto tiene asociadas una serie de keywords y que los keywords por si sólos carecen de importancia además de que por si sólos no existen, pues lo dicho el problema es que las keywords que se asocian al concepto se muestran en un formulario adjunto al del concepto y que no consigue rellenar el formulario de las keywords para más de 3 keywords… por lo cual al hacer el duplicado se pierde una posible gran parte de la información.

eso es todo por el momento.

Related Posts:




One Response to “rellenar formulario django”

  1. nadia Says:

    Muy interesante lo que escribes, y pues espero que me puedas ayudar ya que yo tambien me peleo con el sr.django :P y pues es en el uso de formularios espero que me puedas ayudar, y me puedas escribir a mi mail o agregarme al msn para que te pueda explicar.

    Espero me puedas ayudar, ya busque en todos lados y nada :S:S:S

Leave a Reply

*