Cita:
Iniciado por razpeitia
Código Python:
Ver original# models.py
class Prueba(models.Model):
fecha = models.DateField(auto_now_add=False)
# Ok, por favor nunca nombre tus variables con 1, 2, hasta n
# Si es solo para aprender esta bien
# Pero por favor nunca lo hagas en un proyecto real
campo1 = models.IntegerField(null=True)
campo2 = models.IntegerField(null=True)
def suma(self):
# Obviamente saltara una excepcion si campo1 o campo2
# son null en la db (y por lo tanto None en python)
return self.campo1 + self.campo2
# views.py
from django.shortcuts import render_to_response
from hsemanales.models import Prueba
from django.template import RequestContext
def home(request): # Por favor pon nombres descriptivos
# Objeto creado en memoria
# No sera guardado en la db hasta que se lo indiques
# Ojo aqui nunca le indico que lo guarde
prueba = Prueba(campo1=10, campo2=20)
return render_to_response('home.html',
{'prueba': prueba},
context_instance=RequestContext(request))
Y en nuestra plantilla:
Código HTML:
Ver original{# En alguna parte de nuestra plantilla #}
{{ 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!