У меня есть этот код, но они не вычисляют текущий amout. Мне нужно сэкономить 2 раза для работы. Нам нужны даты на столе.Как рассчитать сумму многих из многих продуктов
класс меню есть:
product
description
price
.
from django.db import models
from django.utils.encoding import smart_unicode
from menu.models import Menu
class Order(models.Model):
date = models.DateTimeField(auto_now_add=True, null=True)
table = models.IntegerField(null=False, max_length=2,)
products = models.ManyToManyField(Menu,through='OrderProduct')
paid = models.BooleanField(default=False)
total = models.IntegerField(,default=0,editable=False,null=True)
def save(self, *args, **kwargs):
self.total = 0
for product in self.products.all():
relationship_queryset = OrderProduct.objects.filter(order=self, product=product)
for p in relationship_queryset.all():
self.total += p.total_products
super(Order, self).save(*args, **kwargs)
def __unicode__(self):
return smart_unicode(self.table)
class OrderProduct(models.Model):
order = models.ForeignKey(Order)
product = models.ForeignKey(Menu)
num_products = models.IntegerField(max_length=2)
total_products = models.IntegerField(default=0,editable=False)
def save(self, *args, **kwargs):
self.total_products = (self.product.precio * self.num_products)
super(OrderProduct, self).save(*args, **kwargs)
Update2
Я использую post_save но вернуть максимальной глубины рекурсии превысила
Их я нашел намек на @cached_property и изменить метод пользовательского Seve к этой кэшированных собственности , Я не знаю, это лучший способ сделать, но это workin.
@cached_property
def total(self):
x = 0
for product in self.productos.all():
relationship_queryset = OrderProduct.objects.filter(order=self, product=product)
for p in relationship_queryset.all():
x += p.total_products
return x
В чем проблема? где вам нужна помощь? – doniyor