@@ -54,13 +54,23 @@ def results_iter(
54
54
except EmptyResultSet :
55
55
results = []
56
56
57
+ converters = self .get_converters (columns )
57
58
for entity in results :
58
- yield self ._make_result (entity , columns , tuple_expected = tuple_expected )
59
+ yield self ._make_result (entity , columns , converters , tuple_expected = tuple_expected )
59
60
60
61
def has_results (self ):
61
62
return bool (self .get_count (check_exists = True ))
62
63
63
- def _make_result (self , entity , columns , tuple_expected = False ):
64
+ def get_converters (self , columns ):
65
+ converters = {}
66
+ for column in columns :
67
+ backend_converters = self .connection .ops .get_db_converters (column )
68
+ field_converters = column .field .get_db_converters (self .connection )
69
+ if backend_converters or field_converters :
70
+ converters [column .target .column ] = backend_converters + field_converters
71
+ return converters
72
+
73
+ def _make_result (self , entity , columns , converters , tuple_expected = False ):
64
74
"""
65
75
Decode values for the given fields from the database entity.
66
76
@@ -74,12 +84,9 @@ def _make_result(self, entity, columns, tuple_expected=False):
74
84
value = entity .get (column , NOT_PROVIDED )
75
85
if value is NOT_PROVIDED :
76
86
value = field .get_default ()
77
- else :
87
+ elif converters :
78
88
# Decode values using Django's database converters API.
79
- converters = self .connection .ops .get_db_converters (col ) + field .get_db_converters (
80
- self .connection
81
- )
82
- for converter in converters :
89
+ for converter in converters .get (column , ()):
83
90
value = converter (value , col , self .connection )
84
91
result .append (value )
85
92
if tuple_expected :
0 commit comments