2012-04-14 2 views
0
내가 상점이 상점이

이 이벤트는 이벤트 의 한 당신이, 당신이 할인 3 개 USD를 얻을 것이다 항목이 목록의 5 개를 구입하는 경우, 난, 쿼리를 작성하는 노력이 설정장고 쿼리

그는 5 개를 구입하면 그가 얻을 것이다

하지만 난 항목이 목록의 수량과 일치 수있는 방법을 지금

o=order_products.objects.filter(order__id=1).values('product').annotate(Sum('qty')) 
offers.objects.filter(products__id__in=o.values('product_id')).distinct(True) 

를 작동하지 않았다는 예를 들어

의 할인 또는 여러 개를 가지고 동일 단호박 그는 10 개를 구입하면 t 3 USD 그는 ... 등 할인 6 달러를 얻을 것이다

class product(models.Model): 
    id = models.AutoField(primary_key=True) 
    name = models.CharField(max_length=255) 
    price=models.FloatField() 

class order(models.Model): 
    id = models.AutoField(primary_key=True) 
    order_date = models.DateTimeField(auto_now=True) 

class order_products(models.Model): 
    product=models.ForeignKey(product) 
    qty=models.IntegerField() 
    order=models.ForeignKey(order) 

class offers(models.Model): 
    id = models.AutoField(primary_key=True) 
    products = models.ManyToManyField(product) 
    qty = models.FloatField() 
    discount_amount=models.FloatField() 

답변

0

한 가지 방법 :

from collections import Counter 

order = order_products.objects.filter(order__id=1).values('product__pk') 
product_count = dict(Counter(order)) 

discounts = {} 

for id,count in product_count.iteritems(): 
    offer = offers.objects.filter(products__pk=id,qty=count) 
    if offer.count(): 
    discounts[id] = offer.discount_amount 

for id,discount in discounts.iteritems(): 
    print '%d of %s discounted by %0.3f' % (product_count[id],product.objects.get(pk=id).name,discount)