跨带有count的外键的Django查询集

跨带有count的外键的Django查询集,django,Django,我需要一些帮助来回答一个问题。我有三个外键连接的模型这些是供应商和食材。我需要得到五家供应商的名字,他们有最多的原料需要补充。我的模型如下所示,根据我的理解,我需要首先筛选库存状态为“缺货”的成分。然后,我可能需要通过注释对它们执行计数,获取此计数并对其排序。最后,我将使用.orderby()[5:]上的前五个。我不知道如何把这一切放在一起,并将感谢任何可用的帮助 class Ingredients(models.Model): out_of_stock = "out_of_stock"

我需要一些帮助来回答一个问题。我有三个外键连接的模型这些是供应商和食材。我需要得到五家供应商的名字,他们有最多的原料需要补充。我的模型如下所示,根据我的理解,我需要首先筛选库存状态为“缺货”的成分。然后,我可能需要通过注释对它们执行计数,获取此计数并对其排序。最后,我将使用.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)

对不起,如果有点不清楚的话,我正在努力把我的想法和我现在正在写的东西结合起来。如果您需要任何澄清,请发表评论。提前谢谢

你正朝着正确的方向前进。这将为您提供按OOS成分计数分组的供应商列表

ss = Supplier.objects.filter(restaurant__ingredients__stock="Out of stock").annotate(count=Count('restaurant__ingredients__stock')).order_by('-count')
输出如下:

计数

ss[0]。计数
==3

现在,如果你想从中挑选5个-


top_five=ss[:5]

我现在可以访问供应商列表,但无法访问计数值。我使用的是Supplier.objects.filter(restaurant\uuu components\uu stock=“Out of stock”).annotation(s\u count=count('r\u name')).order\u by(-s\u count)[:5],这是朝着正确方向迈出的一步,但并不正确,我假设这是因为我指望的是r\u name而不是stock?