5
5
import pydantic
6
6
from django .core import checks , exceptions
7
7
from django .core .serializers .json import DjangoJSONEncoder
8
- from django .db .models .expressions import BaseExpression , Col , Value
8
+ from django .db .models .expressions import BaseExpression , Value
9
9
from django .db .models .fields import NOT_PROVIDED
10
10
from django .db .models .fields .json import JSONField
11
- from django .db .models .lookups import Transform
12
11
from django .db .models .query_utils import DeferredAttribute
13
12
14
13
from django_pydantic_field .compat import deprecation
15
14
from django_pydantic_field .compat .django import GenericContainer
16
15
17
- from . import forms , types
16
+ from . import forms , types , lookups
18
17
19
18
if ty .TYPE_CHECKING :
20
19
import json
@@ -174,7 +173,7 @@ def get_prep_value(self, value: ty.Any):
174
173
def get_transform (self , lookup_name : str ):
175
174
transform : ty .Any = super ().get_transform (lookup_name )
176
175
if transform is not None :
177
- transform = SchemaKeyTransformAdapter (transform )
176
+ transform = lookups . SchemaKeyTransformAdapter (transform , lookup_name )
178
177
return transform
179
178
180
179
def get_default (self ) -> types .ST :
@@ -198,21 +197,6 @@ def value_to_string(self, obj: Model):
198
197
return self .get_prep_value (value )
199
198
200
199
201
- class SchemaKeyTransformAdapter :
202
- """An adapter for creating key transforms for schema field lookups."""
203
-
204
- def __init__ (self , transform : type [Transform ]):
205
- self .transform = transform
206
-
207
- def __call__ (self , col : Col | None = None , * args , ** kwargs ) -> Transform | None :
208
- """All transforms should bypass the SchemaField's adaptaion with `get_prep_value`,
209
- and routed to JSONField's `get_prep_value` for further processing."""
210
- if isinstance (col , BaseExpression ):
211
- col = col .copy ()
212
- col .output_field = super (PydanticSchemaField , col .output_field ) # type: ignore
213
- return self .transform (col , * args , ** kwargs )
214
-
215
-
216
200
@ty .overload
217
201
def SchemaField (
218
202
schema : type [types .ST | None ] | ty .ForwardRef = ...,
0 commit comments