Ver Mensaje Individual
  #3 (permalink)  
Antiguo 05/11/2013, 21:57
Avatar de stormearth
stormearth
 
Fecha de Ingreso: octubre-2013
Ubicación: Quito
Mensajes: 68
Antigüedad: 11 años, 1 mes
Puntos: 2
Respuesta: Como trabajar con los objetos de models.py en django

Cita:
Iniciado por razpeitia Ver Mensaje
Código Python:
Ver original
  1. # models.py
  2. class Prueba(models.Model):
  3.     fecha = models.DateField(auto_now_add=False)
  4.     # Ok, por favor nunca nombre tus variables con 1, 2, hasta n
  5.     # Si es solo para aprender esta bien
  6.     # Pero por favor nunca lo hagas en un proyecto real
  7.     campo1 = models.IntegerField(null=True)
  8.     campo2 = models.IntegerField(null=True)
  9.  
  10.     def suma(self):
  11.         # Obviamente saltara una excepcion si campo1 o campo2
  12.         # son null en la db (y por lo tanto None en python)
  13.         return self.campo1 + self.campo2
  14.  
  15. # views.py
  16. from django.shortcuts import render_to_response
  17. from hsemanales.models import Prueba
  18. from django.template import RequestContext
  19.  
  20. def home(request): # Por favor pon nombres descriptivos
  21.     # Objeto creado en memoria
  22.     # No sera guardado en la db hasta que se lo indiques
  23.     # Ojo aqui nunca le indico que lo guarde
  24.     prueba = Prueba(campo1=10, campo2=20)
  25.     return render_to_response('home.html',
  26.                           {'prueba': prueba},
  27.                           context_instance=RequestContext(request))

Y en nuestra plantilla:
Código HTML:
Ver original
  1. {# En alguna parte de nuestra plantilla #}
  2. {{ prueba.suma }}

El problema es parece que no entiendes el concepto de base de datos y tampoco el de ORM. Lo cual si vas empezando es mas que comprensible que no lo sepas así que aquí va.

Un modelo lo puedes visualizar como si fuera una tabla en tu db. Y cada atributo que defines es un campo en tu tabla. Si quieres hacer una operación sobre un campo o mas campo en un solo registro lo puedes hacer por medio de un método.

Otra cosa, te recomiendo leer sobre django, hay un motón de documentación de calidad en la pagina oficial. [url]https://docs.djangoproject.com/en/1.5/[/url]

Si lo quieres en español puedes buscar en google y te encontraras con muchos materiales pero la verdad no me atrevo a recomendarlos porque nunca he checado su calidad.


Muchas gracias Razpeitia por tu respuesta. De hecho cambie la distribución de mi modelo y mis views como me lo recomiendas y ya no me da el error. Ahora tengo otro problema, que es el mismo que parece que no termino de solucionar.

En models.py cree un método que suma los dos campos. El problema es que siempre son cero, creo que es porque no me estoy comunicando con la base de datos bien.


Código:
class HDiarias(models.Model):
	fecha = models.DateField(auto_now_add=False)
	tec = models.IntegerField(null=True)
	pgeneral = models.IntegerField(null=True)
	
	def sumar(self):
		if self.pgeneral != None: (Solo chekeo q los campos no sean null)
			f = int(str(self.pgeneral))
		else:
			f = 0

		if self.tec != None:
			t = int(str(self.tec))
		else:
			t= 0

		suma = f + t
		return suma
En views.py declaro un objeto como la clase(puesto que no puedo llamar al metodo sumar sobre nada) y luego mando la variable al html.

Código:
from hsemanales.models import HDiarias
dia = HDiarias()
def main(request):
	ultimos_dias = HDiarias.objects.all().order_by('fecha')
	suma = dia.sumar()
	t = loader.get_template('main.html')
	c = Context({'ultimos_dias': ultimos_dias,'suma':suma})
	return HttpResponse(t.render(c))

El tema es que dia.sumar() siempre me da 0, es decir, que los campos son nulos. Estoy seguro que en la base de datos los campos no son nulos, pero tengo la sospecha que no me estoy comunicando bien con la base de datos.

Muchas gracias por tu ayuda.
Cualquier sugerencia es bienvenida!