2010-11-25 22 views
0

こんにちは私は、Djangoのオブジェクト上の多くの2の多くの分野、フィルタ結果が

はFoo < =>バーそう

私はFoo.objects.filterのようなものでフィルタリングた場合(bar_を持っています名前 _contains =「X」)私はfooが、その後FOOSバーラウンド、FOOSラウンドテンプレートIループでだから、Xを含む名前を持つ、関連バーのオブジェクトと

オブジェクトが、私はすべてのバーを取得し、すべてを得ることを期待 フィルタによってフィルタリングされたものだけでなく、そのfooのために!

すべてのヘルプは、簡略化のために5月に更新


、いくつかのサンプルコード、1を高く評価し、同じ問題が上記で..だから

Models.py

class Foo(models.Model): 
    bob = models.CharField(max_length=255) 

class Bar(models.Model): 
    wibble = models.CharField(max_length=255) 
    foos = models.ForeignKey('Foo') 

を適用しますオブジェクトのようなものを言う...

foobar = Foo.objects.filter(bob__wibble__icontains='blagh') 

私はレンダリングのためのテンプレートに渡します、そして、私は、クエリと一致するバーを持つすべてのfoosを持っていると期待しますが、私はそれを取得しませんが、私はクエリに一致するバーそのfooをForiegn Keyとして持つすべてのバー。私は

私はバーを有する1つのfooの持っている、すなわち[{ 'wibble': 'blagh'}、{ 'wibble': 'ブロブ'}、{TWIP ' 'wibble'}]私のテンプレートでは、次の

{% for bar in foobar.bar_set.all %} 
    {{ bar.wibble }}, 
{% endfor %} 

の代わりに、単に「blagh」i「はblagh、ブロブ、TWIP」

+0

コードを入力してください。 – philgiese

+0

テンプレートでフィルタを作成したいですか? – eos87

答えて

2

あなたは任意のコードを示していないになるだろうが、あなたはフィルタリングされているように見え取得フー、バーではない。バーのリストの中に名前が 'x'のBarを持つすべてのFoosを取得しますが、バーをxを含むものに限定するものは何もしません。

あなたはたぶん逆のやり方をしたいと思います:Barのフィルター式を使って、名前= 'x'のものだけを取得し、関連するFoosのリストを反復処理します。

コメントの後編集まだフレーズではなく、バーをフィルタリングする必要があります。反復処理を行うと、テンプレート内でグループ化を行うことができます。例:

bars = Bar.objects.filter(wibble__icontains='blagh').order_by('foo').select_related() 

{% for bar in bars %} 
    {% ifchanged bar.foo %}{{ bar.foo.bob }}{% endifchanged %} 
    {{ bar.wibble }}, 
{% endfor %} 
+0

私はバーではなく、Foosでグループ化する必要があります 私はバーが一致しているfoosが必要です。 私はSQLで何かを混乱させることなく、このデータをすべて取りたいと思っています.SQLを使ってdicts/dynamicオブジェクトに配置するのは数分ですが、Djangoオブジェクトの使用の全ポイントを無効にします。 – Chris

+0

私は、あなたのコメントに応じていくつかの説明を追加しました。 –

+0

あなたの助けてくれてありがとうが、私は現実にはフィルタを動的に構築しているので、それを割り引いています。つまり、foo.bar、foo.bob、fooで複数のフィルタをフィルタリングしています。フレッドとそれらのすべての1つが制限される必要があります。 、私はちょうどdjangoのオブジェクトを再びバイパスすると思います。私は彼らがどのように貧弱な考えをしたかに驚いています。 – Chris