【问题标题】:django Query setdjango 查询集
【发布时间】:2012-04-26 15:22:00
【问题描述】:

我有一家商店,这家商店有优惠 优惠之一 如果您购买此清单中的 5 件,您将获得 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()

【问题讨论】:

    标签: django orm django-queryset


    【解决方案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)
    

    【讨论】:

      猜你喜欢
      • 2020-10-26
      • 2017-01-12
      • 2013-12-06
      • 2021-07-25
      • 2011-05-16
      • 2021-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多