我有一个名为 Product 的模型,如下所示。产品可以具有相同的字段“bc_sku”。
class Product(models.Model)
bc_sku = models.IntegerField(null=True, blank=True)
product_type = models.CharField(null=True, blank=True, max_length=50)
merchant = models.CharField(null=True, blank=True, max_length=50)
product_price = models.DecimalField(null=True, blank=True, max_digits=10, decimal_places=2)
例如,假设我有这个对象列表
bc_sku | product_type | merchant | product_price
100 | good | A | 1.00
100 | bad | B | 2.00
100 | bad | C | 3.00
101 | good | A | 7.00
101 | bad | B | 5.00
我想做的是创建一个查询,用重复项的数量以及每个“bc_sku”的最低价格来注释每个“好”产品。然后我希望能够在模板中使用这些对象和值。
bc_sku | product_type | merchant | dup_count | min_price
100 | good | A | 3 | 1.00
101 | good | A | 2 | 5.00
任何帮助将不胜感激,因为我正在努力获取注释和过滤器以使其当前正常工作。
第一个愿望是使用窗函数,但不幸的是不允许结合annotate(Window(...))
and filter(...)
答案是:
from django.db.models import OuterRef, Subquery, Count, Min
subquery = Product.objects.filter(bc_sku=OuterRef('bc_sku')).values('bc_sku')
.annotate(dup_count=Count('*'), min_price=Min('product_price'))
Product.objects.filter(product_type='good')
.annotate(dup_count=Subquery(subquery.values('dup_count')),
min_price=Subquery(subquery.values('min_price')))
您可以在以下位置找到有关此查询如何工作的详细信息docs
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)