我有三个模型,如下所示:
class Restaurant(models.Model):
name = models.CharField(max_length=200)
address = models.CharField(max_length=200)
category = models.CharField(max_length=100, blank=True, null=True)
class MenuCategory(models.Model):
restaurant = models.ForeignKey(Restaurant, on_delete=models.CASCADE)
name = models.CharField(max_length=200)
class MenuItem(models.Model):
menu_category = models.ForeignKey(MenuCategory, on_delete=models.CASCADE)
name = models.CharField(max_length=100)
price = models.DecimalField(max_digits=6, decimal_places=2)
餐馆有很多菜单类别,而有很多菜单项。
这是布置这些关系的正确方法吗?获取给定餐厅所有菜单项的最有效方法是什么?
我希望有一种比遍历给定餐厅的所有菜单类别更有效的方法。
答案 0 :(得分:2)
您可以通过以下方式获得给定餐厅的所有MenuItem
:
MenuItem.objects.filter(menu_category__restaurant=my_restaurant)
其中 my_restaurant
是要为其检索Restaurant
的{{1}}对象。
Django将为此构造一个查询,并且数据库将执行JOIN,如下所示:
MenuItems
由于SELECT menu_item.*
FROM menu_item
JOIN menu_category
ON menu_item.menu_category_id = menu_category.id
WHERE menu_category.restaurant_id = my_restaurant_id
将索引添加到表中,因此通常此JOIN操作非常快。