0

私は次のモデルを持っていると一度に2つの属性に基づいてフィルタリングする方法:私はItemがPK = 20を有し、そのItemInvolvedは種類= 10を持つすべてのParent秒を取得したいDjangoのORM

class Parent(models.Model): 
    item_involved = models.ManyToManyField(Item, through=ItemInvolved) 


class ItemInvolved(models.Model): 
    parent = models.ForeignKey(Parent, related_name='item_involvement') 
    item = models.ForeignKey(Item) 
    kind = models.PositiveIntegerField() 

編集:

は、私は次のオブジェクトがあるとしましょう:

Parent(pk=1) 
Parent(pk=2) 
Parent(pk=3) 
ItemInvolved(pk=11, parent=1, item=18, kind=10) 
ItemInvolved(pk=12, parent=1, item=19, kind=10) 
ItemInvolved(pk=13, parent=1, item=20, kind=10) 
ItemInvolved(pk=14, parent=2, item=20, kind=10) 
ItemInvolved(pk=15, parent=3, item=19, kind=10) 
ItemInvolved(pk=16, parent=3, item=20, kind=20) 

私が得られますクエリを必要とする:

[<Parent: 1>, <Parent: 2>] 
+0

以下の回答のいずれかが、それが1つを受け入れることをお勧めです、あなたを助けている場合! –

答えて

1

parents = Parent.objects.filter(item=20, item__kind=10)

OK。とった。

parents = Parent.objects.filter(item_involved=20, item_involvement__kind=10) 

spanning multi valued relationshipについてのさらなる説明。

+0

これは私がしたいことをしません。これは 'Parent'を' pk'でフィルタリングします。 –

+0

これを変更した編集を間違って受け入れました。ごめんなさい。それを指摘してくれてありがとう!私はちょうどそれを変更しました。 –

+0

私が達成しようとしていることを明確にするために追加されたコンテンツ。また 'item__kind'(あるいは' item_involved__kind'、私は名前を変更しました)は動作しません。 –

0

対応するクエリが成功しなかった場合は、例外をログに記録したい場合:

try: parent = Parent.objects.get(item=20, item__kind=10) except Exception as e: print "[CRITICAL] <some_view.py> - {}".format(e)

関連する問題