如果价格相同,Django过滤查询集以查找产品或首选商家价格的最低价格

时间:2017-06-27 13:15:43

标签: python django django-views django-queryset django-filter

我在models.py中有以下内容:

class Merchant(models.Model):
    name = models.CharField(max_length=256)
    priority = models.PositiveIntegerField()

class MerchantWine(models.Model):
    merchant = models.ForeignKey("Merchant")
    wine_vintage = models.ForeignKey("WineVintage")
    price = models.DecimalField(null=True, blank=True, max_digits=8, decimal_places=2)
    minimum_purchase_unit = models.PositiveIntegerField()

问题:在我的查询集中,我试图将MerchantWine对象限制为

一个。有重复WineVintages和的最低价格版本  B.如果价格相同,那么我想选择与优先级最低的商家相对应的价格。

在我的views.py中,我尝试了以下内容:

        def get_queryset(self):
            #A Restrict MerchantWines to lowest price version(s) of same wine_vintage
            minimum_prices = MerchantWine.objects.values('wine_vintage').annotate(lowest_price=Min('price'))
            results_list = MerchantWine.objects.filter(price__in=minimum_prices.values('lowest_price'))
            #B Restrict MerchantWines to preferred merchant of same wine_vintage and price
            preferred_merchants = results_list.values('wine_vintage').annotate(lowest_priority=Min('merchant__priority'))
            results_list = results_list.filter(merchant__priority__in=preferred_merchants.values('lowest_priority')) # NOT WORKING ON PROD: Chardonnay
            return results_list

似乎A.)正在运作,但B.)并不总是有效。

有人可以帮忙吗? 非常感谢提前。

0 个答案:

没有答案