## Schema

Base representation of a Postgres schema.

    class Schema:
        schema_name: str
        routing: RoutingInfo = None

Routing contains information on the routing method used (e.g. domain, session, header). It's filled automatically via middleware but may be missing in other contexts (e.g. management commands).

### Routing info

Information on the routing method.

    class DomainInfo:
        domain: str
        folder: str | None = None

    class SessionInfo:
        reference: str

    class HeadersInfo:
        reference: str

    RoutingInfo: TypeAlias = DomainInfo | SessionInfo | HeadersInfo | None

## Tenant model

Abstract base class for the tenant model.

    class TenantModel(Schema, models.Model):
        auto_create_schema = True
        auto_drop_schema = False

        schema_name = models.CharField(max_length=63, unique=True)

        class Meta:
            abstract = True

`auto_create_schema` controls whether a schema is automatically created when a instance of the tenant model is created. `auto_drop_schema` controls whether the schema is automatically deleted when the instance is deleted.

## Domain model

Abstract base class for the domain model. Optional when domain routing is not used.

    class DomainModel(models.Model):

        tenant = models.ForeignKey(
            settings.TENANTS["default"]["TENANT_MODEL"],
            db_index=True,
            related_name="domains",
            on_delete=models.CASCADE,
        )

        domain = models.CharField(max_length=253, db_index=True)
        folder = models.SlugField(max_length=253, blank=True, db_index=True)

        is_primary = models.BooleanField(default=True)
        redirect_to_primary = models.BooleanField(default=False)

        class Meta:
            abstract = True
            unique_together = ("domain", "folder")

There should only be one instance per tenant with `is_primary` set to `True`. If `redirect_to_primary` is `True` the routing middleware will perform a permanent redirect to whatever domain and folder is marked as primary.

#### Search

From here you can search these documents. Enter your search terms below.

#### Keyboard Shortcuts

Keys | Action
--- | ---
`?` | Open this help
`n` | Next page
`p` | Previous page
`s` | Search