@@ -441,20 +441,16 @@ class AsType(Func):
441
441
template = "%(expressions)s AS %(data_type)s"
442
442
443
443
def __init__ (self , expression : ExpressionArgument , data_type : str ) -> None :
444
+ from django_mysql .models .fields .dynamic import KeyTransform
445
+
444
446
if not hasattr (expression , "resolve_expression" ):
445
447
expression = Value (expression )
446
448
447
- if data_type not in self .TYPE_MAP :
449
+ if data_type not in KeyTransform .TYPE_MAP and data_type != "BINARY" :
448
450
raise ValueError (f"Invalid data_type '{ data_type } '" )
449
451
450
452
super ().__init__ (expression , data_type = data_type )
451
453
452
- @property
453
- def TYPE_MAP (self ) -> dict [str , type [DjangoField ] | DjangoField ]:
454
- from django_mysql .models .fields .dynamic import KeyTransform
455
-
456
- return KeyTransform .TYPE_MAP
457
-
458
454
459
455
class ColumnAdd (Func ):
460
456
function = "COLUMN_ADD"
@@ -508,25 +504,22 @@ def __init__(
508
504
self ,
509
505
expression : ExpressionArgument ,
510
506
column_name : ExpressionArgument ,
511
- data_type : ExpressionArgument ,
507
+ data_type : str ,
512
508
):
509
+ from django_mysql .models .fields .dynamic import DynamicField , KeyTransform
510
+
513
511
if not hasattr (column_name , "resolve_expression" ):
514
512
column_name = Value (column_name )
515
513
516
- try :
517
- output_field = self .TYPE_MAP [data_type ]
518
- except KeyError :
519
- raise ValueError (f"Invalid data_type '{ data_type } '" )
520
-
514
+ output_field : DjangoField [Any , Any ]
521
515
if data_type == "BINARY" :
522
- output_field = output_field ()
516
+ output_field = DynamicField ()
517
+ else :
518
+ try :
519
+ output_field = KeyTransform .TYPE_MAP [data_type ]
520
+ except KeyError :
521
+ raise ValueError (f"Invalid data_type { data_type !r} " )
523
522
524
523
super ().__init__ (
525
524
expression , column_name , output_field = output_field , data_type = data_type
526
525
)
527
-
528
- @property
529
- def TYPE_MAP (self ) -> dict [str , DjangoField | type [DjangoField ]]:
530
- from django_mysql .models .fields .dynamic import KeyTransform
531
-
532
- return KeyTransform .TYPE_MAP
0 commit comments