3

既にフィルタリングされているクエリセットを使用する必要があります。. フィルターを再度適用し、OR を使用して既存のパラメーターに新しいパラメーターを接続する方法はありますか? クエリセットがすでに language='de' でフィルタリングされていて、'OR language='en' をそれに接続できる場合、探しているものが得られます! ありがとう!

4

1 に答える 1

3

あなたが求めていることをすることが可能だとは思いません。

django で OR を実行する方法は次のとおりです。

Model.objects.filter(Q(question__startswith='Who') | Q(question__startswith='What'))

したがって、実際にこれを実行したい場合:

Model.objects.filter(Q(language='de') | Q(language='en'))

両方を同じ filter() 呼び出しに入れる必要があるため、後の filter() 呼び出しで他の or 句を追加することはできません。

これをやろうとしている理由は、データベースに再度アクセスすることを懸念しているからだと思いますが、正確な結果を得る唯一の方法は、データベースに再度アクセスすることです。

単純にクリーンな DRY コードを作成することに関心がある場合は、次のように、両方のクエリに共通するすべてのフィルターを先頭に置き、そのクエリ セットを後で「フォーク」することができます。

shared_qs = Model.objects.filter(active=True)
german_entries = shared_qs.filter(language='de')
german_and_english = shared_qs.filter(Q(language='de') | Q(language='en'))
于 2009-10-29T19:19:06.640 に答える