Django's Object-Relational Mapping layer converts Python classes into relational database structures. Defining a model requires subclassing models.Model:
from django.db import models
class Contributor(models.Model):
full_name = models.CharField(max_length=100)
contact_email = models.EmailField()
is_verified = models.BooleanField(default=False)
registration_date = models.DateTimeField(auto_now_add=True)
Applying migration commands against this definition produces a corresponding schema. In PostgreSQL environments, the resulting command appears as:
CREATE TABLE myapp_contributor (
id SERIAL PRIMARY KEY,
full_name VARCHAR(100) NOT NULL,
contact_email VARCHAR(254) NOT NULL UNIQUE,
is_verified BOOLEAN DEFAULT FALSE,
registration_date TIMESTAMP WITHOUT TIME ZONE NOT NULL
);
The framework automatically prefixes the table name using the application label and appends the lowercase model identifier. This naming convention can be customized through the Meta configuration. An auto-incrementing integer primary key named id attaches itself to every class unless explicitly overridden or suppressed. Additionally, Django abstracts vendor-specific syntax, compiling statements that align with the database backend configured in the project settings.
To activate the application containing these definitions, append its dotted module path to the INSTALLED_APPS list:
INSTALLED_APPS = [
# ... default configurations ...
'myapp',
]
Core Field Mappings
Each attribute corresponds to a specific database column type via dedicated field classes:
CharField: Variable-length strings. Requires themax_lengthparameter.TextField: Unlimited text blocks suited for long-form content.IntegerField: Standard signed integer storage.FloatField: IEEE 754 floating-point numbers.DecimalField: Precise decimal arithmetic. Demandsmax_digitsanddecimal_placesarguments. Example:budget = models.DecimalField(max_digits=6, decimal_places=2)reserves six total positions with two fractional digits.DateField: Calendar dates excluding time components.DateTimeField: Timestamps with optional timezone support.BooleanField: Binary flags mapping to true/false states.SlugField: URL-safe strings inheriting character restrictions fromCharField.ImageField: Secure binary references extendingFileFieldfor raster assets.
Constraint Configuration
Field instantiations accept keyword arguments governing validation and persistence behavior:
primary_key: Marks the attribute as the row identifier. Omission triggers automatic ID provisioning.unique: Guarantees distinct values across all records.default: Establishes fallback values during initialization. Accepts static literals or callable functions.null: Regulates database-level NULL acceptance. Defaults toFalseto preserve data integrity and indexing efficiency.blank: Controls frontend form validation tolerance. Setting toTruepermits empty submissions independent of thenullparameter.db_column: Replaces the auto-derived column name with a custom identifier.db_index: Generates a dedicated B-tree structure to optimize search operations.choices: Restricts inputs to a fixed sequence of tuple pairs representing internal codes and human labels.
Metadata Directives
Customization scales through the nested Meta class:
class WriterProfile(models.Model):
display_alias = models.CharField(max_length=50)
membership_start = models.DateTimeField()
class Meta:
abstract = True
db_table = 'author_archives'
ordering = ['-membership_start', 'display_alias']
verbose_name = 'Writer Record'
verbose_name_plural = 'Writer Records'
Key Meta parameters include:
abstract: Prevents table generation while enabling field inheritance for descendant models.app_label: Manually binds unattached models to a specific application namespace.db_table: Specifies the exact physical table name, bypassing default naming algorithms.ordering: Dictates default query result sorting. Prefix identifiers with hyphens for descending sequences. Multiple criteria apply sequentially from left to right.verbose_name/verbose_name_plural: Supplies readable descriptors utilized by administrative panels and automated documentation generators.