def django_to_pydantic_model(
model_class: Type[models.Model],
base_class: Type | None = None,
include_fields: str | list| tuple | None = None,
exclude_fields: str | list | tuple | None = None
):
if not issubclass(model_class, models.Model):
raise ValueError("model_class must be a subclass of django.db.models.Model")
if include_fields is None:
include_fields = []
if exclude_fields is None:
exclude_fields = []
pydantic_fields = {}
for model_field in model_class._meta.fields:
field_name = model_field.attname
if len(include_fields) > 0 and field_name not in include_fields:
continue
if len(exclude_fields) > 0 and field_name in exclude_fields:
continue
converter = DjangoToPydanticFieldConverter(model_field)
pydantic_fields[field_name] = converter.build_field()
return create_model(
f'{model_class.__name__}',
__base__=base_class,
**pydantic_fields
)