0

私は店を持っており、この店にはオファーがあります。このリストのアイテムを 5 個購入すると、オファーの 1 つが提供されます。3 米ドルの割引が適用されます。クエリを書いてみました。

しかし、うまくいきませんでした

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)

このアイテムのリストの数量を一致させて、この割引または倍数にする方法はありますか

たとえば、5 個購入した場合は 3 米ドルの割引が適用され、10 個購入した場合は 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()
4

1 に答える 1

0

1 つのアプローチ:

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)
于 2012-04-14T15:44:55.690 に答える