Skip to content

converters

django_spire.core.converters

__all__ = ['django_to_pydantic_model', 'fake_model_field_value'] module-attribute

django_to_pydantic_model

Source code in django_spire/core/converters/to_pydantic.py
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
    )

fake_model_field_value

Source code in django_spire/core/converters/to_data.py
def fake_model_field_value(model_class, field_name: str, faker_method=None):
    field = model_class._meta.get_field(field_name)
    return DjangoFieldToFakerData(field, faker_method).convert()