File tree Expand file tree Collapse file tree 3 files changed +28
-8
lines changed Expand file tree Collapse file tree 3 files changed +28
-8
lines changed Original file line number Diff line number Diff line change 44
55from dj_rql .filter_cls import RQLFilterClass
66from django_mongoengine .fields .djangoflavor import DjangoField
7- from mongoengine import Q
87from py_rql .constants import FilterLookups
98
109from dj_mongoengine_rql .constants import MongoengineFilterTypes
11-
12-
13- class _Q (Q ):
14- def __invert__ (self ):
15- return self .__class__ (__raw__ = {'$nor' : [self .query ]})
10+ from dj_mongoengine_rql .q import Q
1611
1712
1813class MongoengineRQLFilterClass (RQLFilterClass ):
19- Q_CLS = _Q
14+ Q_CLS = Q
2015 FILTER_TYPES_CLS = MongoengineFilterTypes
2116
17+ def __init__ (self , * args , ** kwargs ):
18+ super ().__init__ (* args , ** kwargs )
19+ self .__class__ .Q_CLS .MODEL = self .__class__ .MODEL
20+
2221 @classmethod
2322 def _is_valid_model_cls (cls , model ):
2423 return True
Original file line number Diff line number Diff line change 1+ #
2+ # Copyright © 2022 CloudBlue LLC. All rights reserved.
3+ #
4+
5+ from mongoengine import Q as ME_Q
6+ from mongoengine .queryset .transform import query
7+
8+
9+ class Q (ME_Q ):
10+ MODEL = None
11+
12+ def __invert__ (self ):
13+ result = self .__class__ (__raw__ = {'$nor' : [query (_doc_cls = self .MODEL , ** self .query )]})
14+
15+ return result
Original file line number Diff line number Diff line change @@ -20,7 +20,7 @@ class Doc(Document):
2020 d = fields .DateField (blank = True )
2121 dec = fields .DecimalField (blank = True )
2222 flt = fields .FloatField (blank = True )
23- int_f = fields .IntField (blank = True )
23+ int_f = fields .IntField (blank = True , db_field = 'other_int_f' )
2424
2525 related_doc = fields .EmbeddedDocumentField ('EmbDoc' , blank = True )
2626
@@ -70,3 +70,9 @@ def test_init():
7070 )
7171
7272 assert list (qs .all ()) == []
73+
74+
75+ def test_not ():
76+ _ , qs = DocFilterClass (Doc .objects .filter (int_f = 1 )).apply_filters ('not(eq(int_f,120))' )
77+
78+ assert qs .query .q == {'$nor' : [{'other_int_f' : 120 }], 'other_int_f' : 1 }
You can’t perform that action at this time.
0 commit comments