2016-12-23 24 views
0

特定の属性を持つ子どもたちとのインスタンスのクエリセットジャンゴMPTTは、このようなモデルfoobarにして、私は<a href="https://pypi.python.org/pypi/django-mptt/" rel="nofollow noreferrer">Django MPTT</a>を使用してい

私は特定の属性を持つ子どもを持つすべてのFoobarsを選択したい場合
[x for x in Foobar.objects.all() if x.get_children().exists()] 

(のようなpublished)が、私はこれを行うことができます。

[x for x in Foobar.objects.all() if x.get_children().filter(published=True).exists()] 

しかし、これを1つのクエリで行う方法はありません。まあ、親であることの純粋なプロパティは__isnullフィルターを経由してのためにフィルタリングされ

class Example(models.Model): 
    related_foobar = models.ForeignKey(
     Foobar, 
     limit_choices_to=Q(....), # How do I make this work? 
    ) 
+0

'Foobar'sメタの' parent_attr'で 'parent'フィールドが指定されていますか?もしそうなら、 'related_name'は何ですか? – schwobaseggl

+0

@schwobaseggl私はその情報を含めるために私の答えを編集しました。 – Flimm

答えて

1

:私はForeignKeylimit_choices_to引数のためにそれを使用することができるようにするために、1つのクエリでそれを行う必要があります。これは、一般的に逆の外部キーのテストのために保持している:

Foobar.objects.filter(children__isnull=False) # must have children 

このクエリで'children'ForeignKeyrelated_query_nameであることに言及しなければなりません。これはデフォルトではrelated_name(提供されている場合)または小文字のモデル名(この場合はfoobar)になります。具体的な子のプロパティで

は、あなたが簡単に行うことができます。

Foobar.objects.filter(children__published=True) 

にのみ公開され、少なくとも一人の子供とFoobarsが含まれます。

関連する問題

 関連する問題