2015-01-13 45 views
0

我想要訪問有關反向關係的數據,我試圖列出所有銷售的一天,但我不知道正確的方法來做反向關係。許多到很多通過模板中的關係逆轉

  1. 模板上有一些方法嗎?
  2. 更好的做視圖或做了一些自定義過濾器?

模型

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 %} 

回答

1

使用backward relationship

{% 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 %} 
+0

它的作品!,非常感謝你:) – iMaGiNiX