Wednesday, March 11, 2015

Re: soy nuevo en django, y estoy haciendo un proyecto les agradezco su ayuda.

Hola.


mmm, me parece un poco confuso su código y realmente no se el contexto en el que lo está haciendo, pero según el pantallazo
puedo ver que vas a tener problemas a futuro por mantenibilidad,  tal vez puedas mejorar un poco el código.
Sobre su problema tiene razón es un poco avanzado lo que quieres hacer si lo hace de la forma optimizada, sino la solución más simple es iterar el
conjunto de elemento y realizar la operación (multiplicación y luego suma), pero como django es muy bello, mejor la solución es bonita.

Bueno iniciemos por el principio el modelo.

Models.py  hagamos que nuestro código sea compatible con python 2 y 3

from __future__ import unicode_literals
from django.utils.encoding import python_2_unicode_compatible

@python_2_unicode_compatible
class Producto(models.Model):
  ....

   def __str__(self):
         return self.nombre

....


A la vista démosle un poco más de poder, igual que TemplateView django tiene ListView* el cual es más adecuado para el tipo de vista
que tienes (revise la documentación para ver que funcionalidades puede aportarle ej paginado, ordenamiento y filtro)

from django.views.generic.list import ListView
from django.db.models import Sum

class MainPanelView(ListView):
  model = Producto
 
  def get_context_data(self, **kwargs):
    context = super(MainPanelView, self).get_context_data(**kwargs)
    context['total_productos'] = context['object_list'].aggregate(Sum('stock'))['stock__sum']
    context['total'] = context['object_list'].aggregate(precio_compra__sum = Sum('precio_compra', field='precio_compra * stock'))['precio_compra__sum']
    return context

Como verá eliminé varios de los parámetros que le pasa a la vista, esto porque no son necesarios, ya que pueden ser obtenidos desde la template.

la plantilla.   Esta está simplificada para no llenar de ruido el correo y solo tiene lo importante

  <body>
  <ul>
  {%for obj in object_list%}
  <li>{{obj.codigo}} -- {{obj.precio_compra}} -- {{obj.stock}} -- {{obj.preciototal}} </li>
  {%endfor%}
  </ul>
  <h2> cantidad: {{object_list.count}}</h2>
  <h2> total: {{total}}</h2>
  </body>

Algo interesante es que por defecto se va a buscar la plantilla en la carpeta
<miapp>/templates/<miapp>/producto_list.html, pero igual como el templateView se puede sobrescribir donde se busca la plantilla.


Saludos.


2015-03-11 12:25 GMT-06:00 wilder Hernández Garcia <whg.virgo@gmail.com>:
estoy resien empezando a programar en django, y tengo el siguiente problema, les agradecería mucho su ayuda.


class Producto(models.Model):
codigo = models.CharField(max_length=10, unique=True) nombre = models.CharField(max_length=200, unique=True)
descripcion = models.TextField(max_length=400) categoria = models.ForeignKey(Categoria) precio_compra = models.DecimalField(max_digits=5, decimal_places=2, default=0.00) stock = models.IntegerField()
def __unicode__(self): return self.nombre def preeciototal(self): precio_total=self.precio_compra*self.stock return precio_total Y la siguiente Vista
class MainPanelView(TemplateView): template_name = 'farmacia/panel.html' mode = Producto def get_context_data(self, **kwargs): context['cantidad'] = context['producto'].count() context['total'] = Producto.objects.aggregate(Sum('precio_compra'))['precio_compra__sum'] context['total_productos'] = Producto.objects.aggregate(Sum('stock'))['stock__sum'] #obtengo la variable stock context['stock'] = Producto.objects.values('stock') #obtengo la variable precio_compra context['precio_compra'] = Producto.objects.values('precio_compra') #context['total'] = context['stock']*context['precio_compra'] product=Producto #total = Producto.preeciototal() return context



el precio lo saco en el models.
def preeciototal(self): precio_total=self.precio_compra*self.stock return precio_total

como lo aria en las vistas y no en el models.

mi problema es.
como saco el precio total que la lógica seria.
400*520=208000
500*1150=1650
600*1440=864000

208000+1650+864000=Precio total..

no se como hacerlo en las vistas..


Gracias..

--
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users+unsubscribe@googlegroups.com.
To post to this group, send email to django-users@googlegroups.com.
Visit this group at http://groups.google.com/group/django-users.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/97f5ff23-bc8f-4146-a74f-085493f92f65%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.



--
"La utopía sirve para caminar" Fernando Birri

--
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users+unsubscribe@googlegroups.com.
To post to this group, send email to django-users@googlegroups.com.
Visit this group at http://groups.google.com/group/django-users.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/CAG%2B5VyOFWBk4TJyC%3DeAMWcbeRAWZgkTPkWnC8%2B6GL642t5uJsw%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

No comments:

Post a Comment