is_active=True
のオブジェクトと特定のユーザーを返す次のメソッドがあります。Django RESTフレームワーク:結合されたフィルタを使用してクエリーセットを別のクエリーセットから除外します
def filter_active_user(self, queryset, name, value):
return queryset.filter(active_states__is_active=True,
active_states__user_id=value)
私は上記の方法に含まれていないすべてのオブジェクトを含むクエリセットを返すメソッドを作成したいと考えています。だから私はexclude
を使用して、次のメソッドを作成しました:
def filter_inactive_user(self, queryset, name, value):
return queryset.exclude(active_states__is_active=True,
active_states__user_id=value)
私も~Q
を使用して次の実装を試してみました:
def filter_inactive_user(self, queryset, name, value):
return queryset.filter(~Q(active_states__is_active=True,
active_states__user_id=value))
しかし、私は正しい結果を得ることはありません。 たとえば、テストケースでは、3つのオブジェクトで構成されたデータをいくつか作成しました。
record_1.set_active_states_for_users([self.user1.uuid], True)
record_2.set_active_states_for_users([self.user1.uuid], False)
record_2.set_active_states_for_users([self.user2.uuid], True)
record_3.set_active_states_for_users([self.user2.uuid], False)
Iを:私は1つのオブジェクトを取得していますfilter_active_user
方法を使用し、私はfilter_inactive_user
メソッドを使用して他の2を得ることを期待、私は具体的にはまた1を得ていることは以下の私の試験データを発表しました私はrecord_2
を得ています。filter_active_user
をuser=user2
に使っています。 filter_inactive_user
をuser=user2
に使用しているときは、record_1
で、record_3
ではありません。 クエリセットで2つのフィルタを組み合わせる適切な方法を構築するのに手伝ってもらえますか?
私は何かが欠けている場合を除き、あなたは '__is_activeを行う必要がある最初のスニペットの唯一の違いではありません= False'ですか? – Sayse
私は最初の試みで 'exclude'キーワードと2回目の試みで'〜Q'を使うために同じフィルターを使いました。 –
「正しい結果が得られません」とさらに定義する必要があるかもしれません。(結果はどうなりますか?)フィルタで除外してfalseに設定したクエリに微妙な違いがあるかもしれません。 – Sayse