1- from typing import Any , List , Optional , TypeVar , cast
1+ from typing import Any , List , Optional , TypeVar , Union , cast
22
33from django .core .exceptions import ImproperlyConfigured
44from django .db .models import Q , QuerySet
@@ -21,13 +21,13 @@ class FilterLookup:
2121
2222 Example usage:
2323 class MyFilterSchema(FilterSchema):
24- name: Annotated[str | None, FilterLookup("name__icontains")] = None
25- search: Annotated[str | None, FilterLookup(["name__icontains", "email__icontains"])] = None
24+ name: Annotated[Union[ str, None] , FilterLookup("name__icontains")] = None
25+ search: Annotated[Union[ str, None] , FilterLookup(["name__icontains", "email__icontains"])] = None
2626 """
2727
2828 def __init__ (
2929 self ,
30- q : str | List [str ],
30+ q : Union [ str , List [str ] ],
3131 * ,
3232 expression_connector : ExpressionConnector = DEFAULT_FIELD_LEVEL_EXPRESSION_CONNECTOR ,
3333 ignore_none : bool = DEFAULT_IGNORE_NONE ,
@@ -102,42 +102,43 @@ def _get_field_q_expression(
102102 self ,
103103 field_name : str ,
104104 field_info : FieldInfo ,
105- default : str | list [str ] | None = None ,
106- ) -> str | List [str ] | None :
105+ default : Union [ str , list [str ], None ] = None ,
106+ ) -> Union [ str , List [str ], None ] :
107107 filter_lookup = self ._get_filter_lookup (field_name , field_info )
108108 if filter_lookup :
109109 return filter_lookup .q if filter_lookup .q is not None else default
110110
111111 # Legacy approach, consider removing in future versions
112112 field_extra = cast (dict , field_info .json_schema_extra ) or {}
113- return cast (str | list [str ] | None , field_extra .get ("q" , default ))
113+ return cast (Union [ str , list [str ], None ] , field_extra .get ("q" , default ))
114114
115115 def _get_field_expression_connector (
116116 self ,
117117 field_name : str ,
118118 field_info : FieldInfo ,
119- default : ExpressionConnector | None = None ,
120- ) -> ExpressionConnector | None :
119+ default : Union [ ExpressionConnector , None ] = None ,
120+ ) -> Union [ ExpressionConnector , None ] :
121121 filter_lookup = self ._get_filter_lookup (field_name , field_info )
122122 if filter_lookup :
123123 return filter_lookup .expression_connector or default
124124
125125 # Legacy approach, consider removing in future versions
126126 field_extra = cast (dict , field_info .json_schema_extra ) or {}
127127 return cast (
128- ExpressionConnector | None , field_extra .get ("expression_connector" , default )
128+ Union [ExpressionConnector , None ],
129+ field_extra .get ("expression_connector" , default ),
129130 )
130131
131132 def _get_field_ignore_none (
132- self , field_name : str , field_info : FieldInfo , default : bool | None = None
133- ) -> bool | None :
133+ self , field_name : str , field_info : FieldInfo , default : Union [ bool , None ] = None
134+ ) -> Union [ bool , None ] :
134135 filter_lookup = self ._get_filter_lookup (field_name , field_info )
135136 if filter_lookup :
136137 return filter_lookup .ignore_none
137138
138139 # Legacy approach, consider removing in future versions
139140 field_extra = cast (dict , field_info .json_schema_extra ) or {}
140- return cast (bool | None , field_extra .get ("ignore_none" , default ))
141+ return cast (Union [ bool , None ] , field_extra .get ("ignore_none" , default ))
141142
142143 def _resolve_field_expression (
143144 self , field_name : str , field_value : Any , field_info : FieldInfo
0 commit comments