2012-02-04 8 views
1

manyToManyField関係のメンバーが正確にのメンバーがオブジェクトの特定のリストと一致するかどうかをチェックすることによってオブジェクトを照会するにはどうすればよいですか?例えばDjangoのManyToManyFieldの正確な内容を照会

、私は正確にピーマンと玉ねぎを持っているすべてのピザを取得したい

class Topping(models.Model): 
    # ... 

class Pizza(models.Model): 
    # ... 
    toppings = models.ManyToManyField(Topping) 

を与えられた:

pep = Topping(name='pepperoni') 
pep.save() 
onion = Topping(name='onion') 
onion.save() 
tops = [pep, onion] 
p = Pizza.objects.filter(toppings__eq=tops) 

Djangoは__inオペレータを提供していますが、ない__eq。どのようにすれば同等のことができますか?

ありがとうございました。

答えて

-2

はちょうどあなたが欲しいものを得るためにあなたのフィルタをチェーン:

pep = Topping(name='pepperoni') 
pep.save() 
onion = Topping(name='onion') 
onion.save() 
tops = [pep, onion] 
p = Pizza.objects.filter(toppings__id=pep.id).filter(toppings__id=onion.id) 

私はこれを行うには良い方法に遭遇していません。

+1

これは機能していないようです。これは、まだまだシンプルなもののためにはかなり複雑な – Neil

1

どのようにすべてのトッピングをフィルタリングしたら、指定したトッピングの数だけ正確にピザを選択するようにしてください。

​​
+0

という追加のトッピングを持つピザを受け入れます。他のアイデア? – Neil

+0

@NP。、申し訳ありませんが、私はあなたが完全一致を得るための他のアイデアを持っていません。 "私にトッピングXYZと正確にlen(XYZ)トッピングを持つピザを見つけよう" –

+0

私はoperator.or_の使用が誤ったロジックだと考えるとコメントしています。 Toppingsの長さが等価であり、Qオブジェクトの 'または'評価が次のように評価されるため、トピック[[Sausage '、' Pepperoni ']'を含むピザオブジェクトは '' Onion '、' Pepperoni '' ' 'topics = 'Pepperoni''と一致するときは真です。それぞれのトッピングを連続してフィルタリングして、 'と'の比較をしたいとします。 – garromark

関連する問題