我需要一些查询帮助。我有三个由外键链接的模型,这些是供应商< - >餐馆< - >配料。我需要获得具有最多配料数量的五家供应商的名称。我的模型可以在下面看到,根据我的理解,我将需要首先过滤具有stock_status =“缺货”的成分。然后,我需要通过注释对它们进行计数,取这个Count并对其进行排序。最后,我将在.orderby()[5:]上使用前五个。我不确定如何将这些全部放在一起,并希望得到任何可用的帮助。
class Ingredients(models.Model):
out_of_stock = "out_of_stock"
partial = "partial"
full = "full"
STOCK_CHOICES = (
(out_of_stock, 'Out of stock'),
(partial, 'Partial'),
(full, 'Full'),
)
stock = CharField(choices=STOCK_CHOICES, max_length=12)
name = models.CharField(max_length=32, blank=False, null=False)
restaurant_name = models.ForeignKey(Restaurant, on_delete=models.CASCADE)
class Restaurant(models.Model):
r_name = models.CharField(max_length=32, blank=False, null=False)
supplier_name = models.ForeignKey(Supplier, on_delete=models.CASCADE)
class Supplier(models.Model):
name = models.CharField(max_length=32, blank=False, null=False)
对不起,如果有点不清楚,我正在努力把我心中的想法和我现在正在写的东西放在一起。如果您需要任何澄清,请发表评论。提前谢谢!
答案 0 :(得分:0)
你正朝着正确的方向前进。这将为您提供按OOS成分计数分组的供应商列表。
ss = Supplier.objects.filter(restaurant__ingredients__stock="Out of stock").annotate(count=Count('restaurant__ingredients__stock')).order_by('-count')
输出为:
<QuerySet [<Supplier: Supplier object (1)>, <Supplier: Supplier object (2)>]>
得到计数
ss[0].count
== 3
现在,如果你想挑选其中的5个 -
top_five = ss[:5]