5
5
from itertools import chain
6
6
from datetime import datetime
7
7
8
- import traceback
8
+ from django .utils .dateparse import parse_date , parse_datetime , parse_time
9
+
9
10
10
11
class DatabaseOperations (BaseDatabaseOperations ):
11
12
@@ -45,16 +46,9 @@ def no_limit_value(self):
45
46
return None
46
47
47
48
def limit_offset_sql (self , low_mark , high_mark ):
48
- # print("limit_offset_sql")
49
- limit , offset = self ._get_limit_offset_params (low_mark , high_mark )
50
- return ' ' .join (sql for sql in (
51
- # ('LIMIT %d' % limit) if limit else None,
52
- # ('OFFSET %d' % offset) if offset else None,
53
- ) if sql )
49
+ return ''
54
50
55
51
def adapt_datetimefield_value (self , value ):
56
- # print('adapt_datetimefield_value', value)
57
- # print(*traceback.format_stack(), sep='\n')
58
52
if value is None :
59
53
return None
60
54
# Expression values are adapted by the database.
@@ -66,7 +60,7 @@ def adapt_datetimefield_value(self, value):
66
60
value += 2 ** 60
67
61
else :
68
62
value += - (2 ** 61 * 3 )
69
-
63
+
70
64
return str (value )
71
65
# return str(value).split("+")[0]
72
66
@@ -75,15 +69,59 @@ def get_db_converters(self, expression):
75
69
internal_type = expression .output_field .get_internal_type ()
76
70
if internal_type == "DateTimeField" :
77
71
converters .append (self .convert_datetimefield_value )
72
+ if internal_type == "TimeField" :
73
+ converters .append (self .convert_timefield_value )
74
+ if internal_type == "DateField" :
75
+ converters .append (self .convert_datefield_value )
78
76
return converters
79
77
80
78
def convert_datetimefield_value (self , value , expression , connection ):
81
- # print('convert_datetimefield_value', value, expression)
82
- if isinstance (value , int ):
83
- if value > 0 :
84
- value -= 2 ** 60
85
- else :
86
- value -= - (2 ** 61 * 3 )
87
- value = value / 1000000
88
- value = datetime .fromtimestamp (value )
79
+ if value is not None :
80
+ if isinstance (value , int ):
81
+ if value > 0 :
82
+ value -= 2 ** 60
83
+ else :
84
+ value -= - (2 ** 61 * 3 )
85
+ value = value / 1000000
86
+ value = datetime .fromtimestamp (value )
87
+ elif isinstance (value , str ):
88
+ if value != '' :
89
+ value = parse_datetime (value )
90
+ if settings .USE_TZ and not timezone .is_aware (value ):
91
+ value = timezone .make_aware (
92
+ value , self .connection .timezone )
89
93
return value
94
+
95
+ def convert_datefield_value (self , value , expression , connection ):
96
+ if value is not None :
97
+ if not isinstance (value , datetime .date ):
98
+ value = parse_date (value )
99
+ return value
100
+
101
+ def convert_timefield_value (self , value , expression , connection ):
102
+ if value is not None :
103
+ if not isinstance (value , datetime .time ):
104
+ value = parse_time (value )
105
+ return value
106
+
107
+ def conditional_expression_supported_in_where_clause (self , expression ):
108
+ return False
109
+
110
+ def adapt_datefield_value (self , value ):
111
+ print ('adapt_datefield_value: ' + str (value ))
112
+ if value == None :
113
+ return None
114
+ return str (value )
115
+
116
+ def adapt_datetimefield_value (self , value ):
117
+ print ('adapt_datetimefield_value: ' + str (value ))
118
+ if value == None :
119
+ return None
120
+ return str (value )
121
+
122
+ def adapt_timefield_value (self , value ):
123
+ if value is None :
124
+ return None
125
+ if timezone .is_aware (value ):
126
+ raise ValueError ("Django does not support timezone-aware times." )
127
+ return str (value )
0 commit comments