Django查询设置跨越外键与count

时间:2018-04-15 00:33:58

标签: django

我需要一些查询帮助。我有三个由外键链接的模型,这些是供应商< - >餐馆< - >配料。我需要获得具有最多配料数量的五家供应商的名称。我的模型可以在下面看到,根据我的理解,我将需要首先过滤具有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)

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

1 个答案:

答案 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]