同じモデルの2つのクエリセットを比較し、差を取得する方法。
import datetime
all_queryset = ModelA.objects.all()
target_date = datetime.datetime(2015, 1, 1)
filter_queryset = object_all.filter(created_at__gt=target_date)
diff = set(all_queryset).difference(set(filter_queryset))
このようにすると、 {<ModelA: ModelA object>, <ModelA: ModelA object>...}
という感じでfilter_querysetで取得した分を除いたデータを取得することができる。
ただし、以下の点から用法用量には注意が必要。
- diffの結果の型としてはsetなので、順序の担保はされない(Serializerとかにはそのまま喰わせることができる)
- setにしたタイミングで、クエリセットではなく、DBから取得したデータ自体がメモリ上に乗る