【发布时间】:2015-01-28 09:59:42
【问题描述】:
我有这个代码,但他们不计算当前的金额。我需要保存 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)
更新2
我使用 post_save 但返回超出最大递归深度
他们我发现了 @cached_property 的提示,并将自定义 seve 方法更改为这个缓存的属性。我不知道这是最好的方法,但正在工作。
@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
【问题讨论】:
-
有什么问题?您在哪里需要帮助?
标签: django django-models many-to-many django-signals