2011-08-11 12 views
0

私は、(UNIONを達成するために)一緒にOR-EDされた数個のQオブジェクトを持つクエリを持っています。試合。これは、検索結果を表示するときに表示されるので、各検索結果でどの検索語句がヒットしたかを強調表示できます。どのQオブジェクトが見つかったのかに基づいてDjango querySetに注釈を付ける必要があります

ここでは結果のクエリセットを生成したコードです:

Gene.objects.filter(Q(EC__EC='3.2.1.4')|Q(Protein_Family__name__in=famList)|Q(Pfam__Pfam__in=pfams),Protein_length__gte=100, Distance_From_Contig_Upstream__gte=10, Distance_From_Contig_Downstream__gte=10).distinct() 

私は.extraオプションを使用して、この注釈付きの列を追加することができると思います。 https://docs.djangoproject.com/en/1.3/ref/models/querysets/#extra

私はこれを行うことができない場合は、私がしますおそらく3つの別々のクエリを実行し、結果に注釈をつけたり、クエリセットを一緒にしたりすると、おそらくかなり無駄であり、不器用に思えるでしょう。

+0

クエリセットをまとめてORすることはできません。それらが実行されると、結果セットに対する反復子に過ぎません。 OR条件が必要な場合は、それがQオブジェクトの目的です。 – rewritten

+0

@saverio実際には、次のことができます:https://github.com/django/django/blob/master/tests/modeltests/or_lookups/tests.py#L27しかし、Qオブジェクトが一般的に使用されるはずです。 –

答えて

0

extraと注釈を付けると、最終的なdistinctは機能しません。 ECの条件に一致するレコードとProtein.Family.nameの条件に一致するレコードが1つ(JOINedテーブル内に)ある場合は、一致するレコードの1つが表示されます(対応するフラグのみが追加されます)。記録する(結果セットに結果を複製する)。

関連する問題