【发布时间】:2020-10-28 13:05:21
【问题描述】:
我在菜和餐厅之间有这种一对多的关系。
SPICINESS_CHOICES = (
("M", "Mild")
("H", "Hot")
("SH", "Super hot")
)
class Restaurant(Model):
name = models.CharField(max_length=50)
class Dish(Model):
restaurant = models.ForeignKey(Restaurent)
name = models.CharFiedl(null=True, max_length=50)
price = models.IntegerField(max_length=10, null= False)
spicy = models.CharField(null= True, choices=SPICINESS_CHOICES)
我希望能够搜索餐厅以查找他们的菜肴中出现最多的辣味或菜肴的辣味模式https://en.wikipedia.org/wiki/Mode_(statistics)。 Django 似乎没有轻松实现这一点的功能。 假设我们有 3 家餐厅,Anny's、Domino 和 Verspucie。
Anny's 有不同的 8 道菜,其中 2 道菜标记为 Hot,所有其他菜都标记为 Mild,因为老板希望能够为儿童提供多样化的菜单
Domino 有 9 种不同的菜肴,其中 5 道菜标记为热菜,2 道菜标记为超热菜,2 道菜标记为温和。
Verspucie 有 10 种不同的菜肴,其中 8 种被标记为超级热,一种被标记为温和,1 种被标记为热。
因为我想从一个完整的餐厅列表中找到正确的餐厅,所以我希望能够搜索这些餐厅的菜肴中出现最多的辣味。在 postgres 中,可以使用 mode 函数执行此操作,然后将此 mode 值加入到餐厅表中。 如果我想要一家主要提供超级热菜的餐厅,我的查询将如下所示:
SELECT * FROM "restaurant" LEFT OUTER JOIN (SELECT "dish"."restaurant_id" ,mode() WITHIN GROUP (ORDER BY "dish.spicy") AS "mode_spicy" FROM dish GROUP BY "dish"."restaurant_id") mode_table ON "id"="mode_table"."taxonomy_id") WHERE "mode_spicy"='SH';
这将产生 Verspucie 餐厅,因为它是唯一一家将大部分菜肴标记为 Super Hot 的餐厅。但现在我想在 django ORM 语言中执行此操作,但在 django 中找不到 mode() 函数。
编辑: 我最后去了SQL查询
【问题讨论】:
-
你只想找到哪家餐厅的菜名最多的是
Super Hot?以您的示例为例,结果是 Verspucie,因为它有 8 个超级热? -
嗯,大多数菜场“辣”超级辣,但是是的
标签: python django database entity field