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.

Tagged with:
Jan 21

vamos a ver si nos queda bien la mini-introducción…

de un lado hemos de ir a djangoproject i descargarnos de la sección download alguna version que nos pueda servir, con la oficial nos podemos conformar… no vaya a ser que la de desarrollo nos de polsaco un rato.

abrimos esta web, nos la añadimos a favoritos/bookmarks/marcadores y nos vamos preparando para visitarla frequentemente junto con esta otra que nunca va mal. ya que nos ponemos a añadir bookmarks… este otro también puede estar bien, incluso mejor que los anteriores :P

no estaría mal mirarse un poco lo de la instalación antes de meterse a las bravas, otro día me pongo yo con lo de la instalación, de momento dejo el link

no obstante para aquellos a quien les de palo todo el tema del apache y sus módulos y tal, comentaros que hay unas historias con python que te permiten usar y montar django sin necesidad de hacerlo con python, lo tenéis aquí… está bastante recomendable el tema del manage.py ;)

hemos de tener claro que lo que nosotros llamamos clases o objetos en django son los Models… por lo tanto en nuestro fichero models.py deberemos definir las entidades que queremos modelar en objetos y sus atributos y esas cosas como dice aqui

Jan 21

veamos a ver si sabemos como describirlo…

rápidamente lo podriamos catalogar como una librería para crear webs desde python incrustando con ello código o llamadas a código python … o bien como describen en la web del proyecto… como un framework hecho en python para hacer webs…

la verdad es que por lo que lo he tocado me parece bastante potente, no es senzillo de utilizar, pero es muy potente.

está basado en el modelo MVC de programación, es decir Model View Controller, en cristiano y haciendo ya un poco de explicación a parte de traducción, separar la visualización del código.

Tagged with: