Configuration

Back to doc index

Set D2A_CONFIG dict in your django settings. This variable is optional and all keys are also optional.

Example:

from django.db.models import CharField, EmailField
from books.fields import CustomEmailField

D2A_CONFIG = {
    "REL_PARAMS": {
        "*": {
            "backref": "{__back__}",
        },
        "Book.category": {
            "lazy": "joined",
        },
    },
    "COL_PARAMS": {
        "*": {
            "doc": "testtest",
        },
    },
    "TYPE_PARAMS": {
        "*": {
        },
    },
    "TYPES": {
        "Book.title": "default_types.VARCHAR",
    },
    "BLOCKS": {
        "before_importing": "import os",
        "after_importing": "# import finished",
        "before_models": "# start defining models",
        "after_models": "# END OF FILE",
    },
    "MISSING": CharField,
    "ALIASES": {
        CustomEmailField: EmailField,
    },
    "AUTOLOAD": False,
}

ALIASES

type

dict[django.db.models.fields.Field, django.db.models.fields.Field]

If you are using custom django field, d2a is not able to resolve the type as it is.

Set the field to key and ‘a field that you want it to be interpreted’ to value in "ALIASES" dict.

Example:

from django.db import models


class CustomEmailField(models.EmailField):
    pass

D2A_CONFIG = {
    "ALIASES": {
        CustomEmailField: models.EmailField,
    },
}

AUTOLOAD

type

dict

Warning

This option is deprecated.

This option (any dict) enables Auto loading mode.

Example:

D2A_CONFIG = {
    'AUTOLOAD': {
        'module': 'modelsa',  # module name
        'db_type': "mysql",  # database type
    },
}

Then you can import the auto loaded models as a module.

Note

BLOCKS

type

dict[str, str]

This is a template context for Code generation in a word.

The context values will be rendered if its key is referred in a template.

Current original template is here.

COL_PARAMS

type

dict[str, dict[str, any]]

This option updates args that are going to be specified for the sqlalchemy.sql.schema.Column.

Example:

D2A_CONFIG = {
    "COL_PARAMS": {
        "*": {
            "doc": "testtest",
        },
        "Book.title": {
            "server_default": "val",
        }
    },
}
  • * matches all columns.

  • {Model}.{column} matches the column of the Model.

    • Book.title matches title column of Book.

Warning

This option does not work in AUTOLOAD mode.

MISSING

type

django.db.models.fields.Field

This option complements the field that did not resolve type with the specified field.

Example:

from django.db.models import CharField

D2A_CONFIG = {
    "MISSING": CharField,
}

NAME_FORMATTER

NAME_FORMATTER is a function that makes sqlalchemy model name from django model. It requires 1 positional string argument.

The default is a PascalCase transformation, with the same name as the django model except for the intermediate tables that are implicitly created.

Example:

D2A_CONFIG = {
    "NAME_FORMATTER": str.lower,
}

REL_PARAMS

type

dict[str, dict[str, any]]

This option updates args that are going to be specified for the sqlalchemy.orm.relationship.

D2A_CONFIG = {
    "REL_PARAMS": {
        "*": {
            "backref": "{__back__}",
        },
        "Book.category": {
            "lazy": "joined",
        },
    },
}
  • * matches all fields.

  • {Model}.{field} matches the field of the Model.

    • Book.category matches category field of Book.

  • “{}” brackets in the values will be expanded by str.format method. Available keys are follows:

    • __back__

    • __back_target__

    • __target__

    • __model__

    • __related_model__

Warning

This option does not work in AUTOLOAD mode.

TYPE_PARAMS

type

dict[str, dict[str, any]]

This option updates args that are going to be specified for the sqlalchemy.sql.type_api.TypeEngine.

D2A_CONFIG = {
    "TYPE_PARAMS": {
        "Book.title": {
            "collation": "utf8",
        },
    },
}
  • * matches all columns.

  • {Model}.{column} matches the column of the Model.

    • Book.title matches title column of Book.

Warning

This option does not work in AUTOLOAD mode.

TYPES

type

dict[str, str]

This option overrides the type.

D2A_CONFIG = {
    "TYPES": {
        "Book.title": "default_types.VARCHAR",
    },
}
  • * matches all columns.

  • {Model}.{column} matches the column of the Model.

    • Book.title matches title column of Book.

Warning

This option does not work in AUTOLOAD mode.