我有以下方法,它爲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個對象組成。使用filter_active_user
我得到1個對象的方法,我希望用filter_inactive_user
方法來獲得其他2,但我也越來越1.更具體介紹如下我的測試數據:
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)
當我'使用filter_active_user
作爲user=user2
我得到了record_2
。 當我使用filter_inactive_user
代替user=user2
時,我只收到record_1
而不是record_3
。 你能幫我建立一個正確的方式來結合查詢集中的兩個過濾器嗎?
除非我失去了一些東西,是不是從第一個片段,唯一的區別你需要'__is_active = FALSE'? – Sayse
爲了在第一次嘗試中使用'exclude'關鍵字並在第二次嘗試中使用'〜Q',我使用了相同的過濾器。 –
您可能需要進一步定義「我沒有得到正確的結果」(您得到的結果是什麼?)。在排除之間創建的查詢中可能存在細微差異,只是在篩選器中將其設置爲false – Sayse