2012-04-19 62 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