オブジェクト内のFKと呼ばれる2つのフィルタを組み合わせようとしていますが、間違ったデータが重複しています。私のテストケースでは、私は4つのレコードオブジェクトを作成し、私は彼らにはActiveStateし、ユーザーを追加たとえばDjango RESTフレームワーク:2つのクエリーセットを結合するにはどうすればよいですか?
class RecordFilter(df.FilterSet):
user = df.CharFilter(name='active_states__user', method='filter_user')
activestate = df.BooleanFilter(name='active_states__is_active', method='filter_is_active')
class Meta:
model = Record
fields = ['type', 'group', 'user', 'activestate']
def filter_user(self, queryset, _, value):
return queryset.filter(active_states__user_id=value)
def filter_is_active(self, queryset, _, value):
return queryset.filter(active_states__is_active=value)
:
以下はviews.pyにあるフィルタを、発表しました。
record1.set_active_states_for_users([user1.uuid], True)
record2.set_active_states_for_users([user1.uuid], False)
record2.set_active_states_for_users([user2.uuid], True)
record3.set_active_states_for_users([user2.uuid], False)
user = user2とactivestate = Trueに対してこれらのフィルタをテストしようとしました。 そして私は取得しています。なぜならため、ユーザーのアクティブ状態=真、ユーザー= user2の
- 二回RECORD2を= user2が
結果が唯一でなければなりませんレコード2。
私は、chain
がクエリセットの連結を行うことができることに気付きましたが、私はそれを私のviews.pyクラスRecordFilterの中でどうやって使うことができるのか分かりません。何か手掛かりはありますか?
'record2.set_active_states_for_users([user1.uuid]、False)'と 'activestate = True'をフィルタリングすると、なぜ結果は2になるのでしょうか? – Raz
'user = df.CharFilter'の場合、なぜ' queryset.filter(active_states__user_id = value) 'を実行しますか?あなたの場合、 'method' argsはまったく必要ありません。フィルタロジックは、フィールド定義とメソッドに重複しています。 'name' argはfilter文のように動作します。 – Raz
(3行目) 'record2.set_active_states_for_users([user2.uuid]、True)'で両方のフィルターをカバーする唯一のレコードであるため、結果はrecord2でなければなりません。 また、2番目のコメントでは、定義とメソッドを提出したときに重複を取得する可能性がありますか? –