通过模板中的关系进行多对多反转
Many to many reversing through relationship in the template
我想访问反向关系的数据,我想为一天中的所有销售做一个清单,但我不知道反向关系的正确方法。
- 模板上有方法吗?
- 最好在 View 上做还是做一些自定义过滤器???
模特们
class Product(models.Model):
name = models.CharField(null=True, max_length=30, )
price = models.IntegerField(default=0)
description = models.CharField(null=True, max_length=100, )
class Order(models.Model):
date = models.DateTimeField(auto_now_add=True, null=True)
table = models.IntegerField(null=False, max_length=2, )
waiter = models.ForeignKey(User, null=True,default=None)
products = models.ManyToManyField(Product,through='OrderProduct')
paid = models.BooleanField(default=False)
total = models.IntegerField(default=0,editable=False,null=True)
@cached_property
def total(self):
x = 0
for product in self.products.all():
relationship_queryset = OrderProduct.objects.filter(order=self, product=product)
for p in relationship_queryset.all():
x += p.total_products
return x
class OrderProduct(models.Model):
order = models.ForeignKey(Order)
product = models.ForeignKey(Product)
products_quantity = models.IntegerField(max_length=2)
products_total = models.IntegerField(default=0,editable=False)
def save(self, *args, **kwargs):
self.products_total = (self.product.price * self.products_quantity)
super(OrderProduct, self).save(*args, **kwargs)
景色
def sales(request):
today = datetime.utcnow()
today_sales = m.Order.objects.filter(date=today).all()
return render_to_response('pages/sales.html',{'request':request,'sales':today_sales})
模板
{% for sale in sales %}
<ul>{{ sale.date }}|{{ sale.paid }}|{{ sale.total }}</ul>
!! Here i wanna put the products from the current sale !!
{% for product in sales.products %}
{{ product.name }}|{{ product.price }}|{{ product.products_quantity }}|{{ product.products_total }}
{% endfor %}
{% endfor %}
{% for order_product in sale.orderproduct_set.all %}
{{ order_product.product.name }}|{{ order_product.product.price }}|{{ order_product.products_quantity }}|{{ order_product.products_total }}
{% endfor %}
我想访问反向关系的数据,我想为一天中的所有销售做一个清单,但我不知道反向关系的正确方法。
- 模板上有方法吗?
- 最好在 View 上做还是做一些自定义过滤器???
模特们
class Product(models.Model):
name = models.CharField(null=True, max_length=30, )
price = models.IntegerField(default=0)
description = models.CharField(null=True, max_length=100, )
class Order(models.Model):
date = models.DateTimeField(auto_now_add=True, null=True)
table = models.IntegerField(null=False, max_length=2, )
waiter = models.ForeignKey(User, null=True,default=None)
products = models.ManyToManyField(Product,through='OrderProduct')
paid = models.BooleanField(default=False)
total = models.IntegerField(default=0,editable=False,null=True)
@cached_property
def total(self):
x = 0
for product in self.products.all():
relationship_queryset = OrderProduct.objects.filter(order=self, product=product)
for p in relationship_queryset.all():
x += p.total_products
return x
class OrderProduct(models.Model):
order = models.ForeignKey(Order)
product = models.ForeignKey(Product)
products_quantity = models.IntegerField(max_length=2)
products_total = models.IntegerField(default=0,editable=False)
def save(self, *args, **kwargs):
self.products_total = (self.product.price * self.products_quantity)
super(OrderProduct, self).save(*args, **kwargs)
景色
def sales(request):
today = datetime.utcnow()
today_sales = m.Order.objects.filter(date=today).all()
return render_to_response('pages/sales.html',{'request':request,'sales':today_sales})
模板
{% for sale in sales %}
<ul>{{ sale.date }}|{{ sale.paid }}|{{ sale.total }}</ul>
!! Here i wanna put the products from the current sale !!
{% for product in sales.products %}
{{ product.name }}|{{ product.price }}|{{ product.products_quantity }}|{{ product.products_total }}
{% endfor %}
{% endfor %}
{% for order_product in sale.orderproduct_set.all %}
{{ order_product.product.name }}|{{ order_product.product.price }}|{{ order_product.products_quantity }}|{{ order_product.products_total }}
{% endfor %}