2012-04-19 4 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)を確認してください。 –

答えて

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

django 1.4で導入された機能ですか?関係を後ろ向きに進んでいますか? – dm03514

+1

@ dm03514これは非常に長い間行われてきました。少なくとも1.0と思う。 –

+1

@JoshSmeatonそれよりも長く、私は0.91以来Djangoを使用していましたが、それでも十分に確立されていました。 –