2012-04-19 41 views
3

我有建立这样的模型问题:Django的查询)

class Topping(models.Model): 
    name = models.CharField(max_length=30) 

class Pizza(models.Model): 
    cook = models.ForeignKey(Cook) 
    name = models.CharField(max_length=50) 
    toppings = models.ManyToManyField(Topping) 

我想选择他的比萨饼使用提供厨师所有浇头

在SQL我可以使用select * from Toppings t where t.id IN(select topping_id from Pizzas where cook_id = ?)或其他方式(肯定更高效:P)。问题是我必然会使用django模型,因为基础依赖关系,比如分页。

因为它是由许多应用程序使用的数据库将是巨大的,如果它可以在不改变模式来完成...

+1

稍微offtopic,但可能会帮助你在你的工作,你也可以找到所有的反向链路在许多到许多的特定对象,例如some_topping.pizza_set.all()给出所有使用该主题的比萨饼,只要确保isinstance(some_topping,Topping) – 2012-04-19 14:07:40

回答

4
Topping.objects.filter(pizza__cook=mycook) 
+0

这是django 1.4中引入的一个功能还是一直存在?通过关系往回走? – dm03514 2012-04-19 14:00:06

+1

@ dm03514它已经存在很长时间了。我认为至少1.0。 – 2012-04-19 14:01:50

+1

@JoshSmeaton比这个更长,我从0.91开始就一直在使用Django,即使那样,它也是非常成熟的。 – 2012-04-19 14:04:08