2
2
import sys
3
3
import warnings
4
4
5
- import django
6
5
import pytz
7
6
from django .core import exceptions , checks
8
7
from django .db .models import DateTimeField , Func , Value
8
+ from django .db .models .functions .datetime import TruncBase , Extract , ExtractYear
9
+ from django .db .models .lookups import Exact , GreaterThan , GreaterThanOrEqual , \
10
+ LessThan , LessThanOrEqual
9
11
from django .utils import timezone
10
12
from django .utils .dateparse import parse_date , parse_datetime
11
13
from django .utils .translation import gettext_lazy as _
12
14
13
- if django .VERSION >= (1 , 11 ):
14
- from django .db .models .functions .datetime import TruncBase , Extract , ExtractYear
15
- from django .db .models .lookups import Exact , GreaterThan , GreaterThanOrEqual , \
16
- LessThan , LessThanOrEqual
17
-
18
15
19
16
class NaiveDateTimeField (DateTimeField ):
20
17
description = _ ("Naive Date (with time)" )
@@ -123,7 +120,7 @@ def get_prep_value(self, value):
123
120
return super (DateTimeField , self ).get_prep_value (value )
124
121
125
122
def from_db_value (self , value , expression , connection , context ):
126
- is_truncbase = django . VERSION >= ( 1 , 11 ) and isinstance (expression , TruncBase )
123
+ is_truncbase = isinstance (expression , TruncBase )
127
124
if is_truncbase and not isinstance (expression , NaiveAsSQLMixin ):
128
125
raise TypeError (
129
126
"Django's %s cannot be used with a NaiveDateTimeField"
@@ -134,8 +131,6 @@ def from_db_value(self, value, expression, connection, context):
134
131
return timezone .make_naive (value , pytz .utc )
135
132
return value
136
133
if timezone .is_aware (value ):
137
- if django .VERSION < (1 , 9 ):
138
- return timezone .make_naive (value , pytz .utc )
139
134
return timezone .make_naive (value , connection .timezone )
140
135
return value
141
136
@@ -210,33 +205,32 @@ def _resolve_output_field(self):
210
205
_monkeypatching = False
211
206
212
207
213
- if django .VERSION >= (1 , 11 ):
214
- _this_module = sys .modules [__name__ ]
215
- _db_functions = sys .modules ['django.db.models.functions' ]
216
- _lookups = set (DateTimeField .get_lookups ().values ())
217
- _patch_classes = [
218
- (Extract , [NaiveAsSQLMixin , NaiveTimezoneMixin ]),
219
- (TruncBase , [NaiveAsSQLMixin , NaiveTimezoneMixin , NaiveConvertValueMixin ]),
220
- ]
221
- for original , mixins in _patch_classes :
222
- for cls in original .__subclasses__ ():
223
-
224
- bases = tuple (mixins ) + (cls ,)
225
- naive_cls = type (cls .__name__ , bases , {})
226
-
227
- if _monkeypatching :
228
- setattr (_db_functions , cls .__name__ , naive_cls )
229
-
230
- if cls in _lookups :
231
- NaiveDateTimeField .register_lookup (naive_cls )
232
-
233
- # Year lookups don't need special handling with naive fields
234
- if cls is ExtractYear :
235
- naive_cls .register_lookup (Exact )
236
- naive_cls .register_lookup (GreaterThan )
237
- naive_cls .register_lookup (GreaterThanOrEqual )
238
- naive_cls .register_lookup (LessThan )
239
- naive_cls .register_lookup (LessThanOrEqual )
240
-
241
- # Add an attribute to this module so these functions can be imported
242
- setattr (_this_module , cls .__name__ , naive_cls )
208
+ _this_module = sys .modules [__name__ ]
209
+ _db_functions = sys .modules ['django.db.models.functions' ]
210
+ _lookups = set (DateTimeField .get_lookups ().values ())
211
+ _patch_classes = [
212
+ (Extract , [NaiveAsSQLMixin , NaiveTimezoneMixin ]),
213
+ (TruncBase , [NaiveAsSQLMixin , NaiveTimezoneMixin , NaiveConvertValueMixin ]),
214
+ ]
215
+ for original , mixins in _patch_classes :
216
+ for cls in original .__subclasses__ ():
217
+
218
+ bases = tuple (mixins ) + (cls ,)
219
+ naive_cls = type (cls .__name__ , bases , {})
220
+
221
+ if _monkeypatching :
222
+ setattr (_db_functions , cls .__name__ , naive_cls )
223
+
224
+ if cls in _lookups :
225
+ NaiveDateTimeField .register_lookup (naive_cls )
226
+
227
+ # Year lookups don't need special handling with naive fields
228
+ if cls is ExtractYear :
229
+ naive_cls .register_lookup (Exact )
230
+ naive_cls .register_lookup (GreaterThan )
231
+ naive_cls .register_lookup (GreaterThanOrEqual )
232
+ naive_cls .register_lookup (LessThan )
233
+ naive_cls .register_lookup (LessThanOrEqual )
234
+
235
+ # Add an attribute to this module so these functions can be imported
236
+ setattr (_this_module , cls .__name__ , naive_cls )
0 commit comments