19
19
from .utils import get_query , is_mapped_class , is_mapped_instance
20
20
21
21
22
- def construct_fields (model , registry , only_fields , exclude_fields ):
22
+ def construct_fields (model , registry , only_fields , exclude_fields , aliased_fields ):
23
23
inspected_model = sqlalchemyinspect (model )
24
+ if aliased_fields is None :
25
+ aliased_fields = {}
24
26
25
27
fields = OrderedDict ()
26
28
@@ -33,7 +35,8 @@ def construct_fields(model, registry, only_fields, exclude_fields):
33
35
# in there. Or when we exclude this field in exclude_fields
34
36
continue
35
37
converted_column = convert_sqlalchemy_column (column , registry )
36
- fields [name ] = converted_column
38
+ alias = aliased_fields .get (name , name )
39
+ fields [alias ] = converted_column
37
40
38
41
for name , composite in inspected_model .composites .items ():
39
42
is_not_in_only = only_fields and name not in only_fields
@@ -44,7 +47,8 @@ def construct_fields(model, registry, only_fields, exclude_fields):
44
47
# in there. Or when we exclude this field in exclude_fields
45
48
continue
46
49
converted_composite = convert_sqlalchemy_composite (composite , registry )
47
- fields [name ] = converted_composite
50
+ alias = aliased_fields .get (name , name )
51
+ fields [alias ] = converted_composite
48
52
49
53
for hybrid_item in inspected_model .all_orm_descriptors :
50
54
@@ -61,7 +65,8 @@ def construct_fields(model, registry, only_fields, exclude_fields):
61
65
continue
62
66
63
67
converted_hybrid_property = convert_sqlalchemy_hybrid_method (hybrid_item )
64
- fields [name ] = converted_hybrid_property
68
+ alias = aliased_fields .get (name , name )
69
+ fields [alias ] = converted_hybrid_property
65
70
66
71
# Get all the columns for the relationships on the model
67
72
for relationship in inspected_model .relationships :
@@ -74,7 +79,8 @@ def construct_fields(model, registry, only_fields, exclude_fields):
74
79
continue
75
80
converted_relationship = convert_sqlalchemy_relationship (relationship , registry )
76
81
name = relationship .key
77
- fields [name ] = converted_relationship
82
+ alias = aliased_fields .get (name , name )
83
+ fields [alias ] = converted_relationship
78
84
79
85
return fields
80
86
@@ -95,6 +101,7 @@ def __init_subclass_with_meta__(
95
101
skip_registry = False ,
96
102
only_fields = (),
97
103
exclude_fields = (),
104
+ aliased_fields = None ,
98
105
connection = None ,
99
106
connection_class = None ,
100
107
use_connection = None ,
@@ -116,7 +123,7 @@ def __init_subclass_with_meta__(
116
123
).format (cls .__name__ , registry )
117
124
118
125
sqla_fields = yank_fields_from_attrs (
119
- construct_fields (model , registry , only_fields , exclude_fields ), _as = Field
126
+ construct_fields (model , registry , only_fields , exclude_fields , aliased_fields ), _as = Field
120
127
)
121
128
122
129
if use_connection is None and interfaces :
0 commit comments