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.
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.
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):
....
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
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>
<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 def preeciototal(self): precio_total=self.precio_compra*self.stock return precio_totalcomo 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=208000500*1150=1650600*1440=864000208000+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