@@ -62,6 +62,7 @@ class CustomEnum(_Base):
6262
6363 def __init__ (self , ** kwargs : Any ):
6464 super ().__init__ (** kwargs )
65+ # dynamically register in the enum registry on instantiation
6566 enum_repr = f"enums.{ self .name } "
6667 enum_registry .register (
6768 self .name ,
@@ -104,8 +105,7 @@ class ModelField(_Base):
104105 """Represents a field in a model with validation and computed properties."""
105106
106107 name : FieldName
107- # one of `type` or `type_enum` HAS to be set
108- type : FieldDataTypeEnum | None = None
108+ type : FieldDataTypeEnum
109109 type_enum : CustomEnum | None = None
110110 primary_key : bool = False
111111 nullable : bool = False
@@ -125,19 +125,26 @@ def name_cc(self) -> str:
125125 @computed_field
126126 @property
127127 def type_info (self ) -> DataTypeInfo :
128- if self .type :
129- return registry .get (self .type )
130128 if self .type_enum :
131129 return enum_registry .get (self .type_enum .name )
132-
133- msg = f"Neither `type` nor `type_enum` was set for model '{ self .name } '"
134- raise ValueError (msg )
130+ return registry .get (self .type )
135131
136132 @model_validator (mode = "after" )
137133 def _validate_type (self ) -> Self :
138- if sum ([self .type is None , self .type_enum is None ]) != 1 :
139- msg = "Exactly one of the fields 'type' or 'type_enum' has to be set."
134+ if self .type == FieldDataTypeEnum .ENUM and self .type_enum is None :
135+ msg = (
136+ f"ModelField '{ self .name } ' has field type 'ENUM', "
137+ "but is missing 'type_enum'."
138+ )
139+ raise ValueError (msg )
140+
141+ if self .type_enum and self .type != FieldDataTypeEnum .ENUM :
142+ msg = (
143+ f"ModelField '{ self .name } ' has 'type_enum' set, "
144+ "but is not field type 'ENUM'."
145+ )
140146 raise ValueError (msg )
147+
141148 return self
142149
143150 @model_validator (mode = "after" )
0 commit comments