A model is the single, definitive source of information about your data. It contains the essential fields and behaviors of the data you’re storing.
Generally, each model maps to a single database table.
- Each model is a Python class that subclasses
- Each attribute of the model represents a database field.
- With all of this, Django gives you an automatically-generated database-access API
This example model defines a
Person, which has a
from django.db import models class Person(models.Model): first_name = models.CharField(max_length=30) last_name = models.CharField(max_length=30)
last_name are fields of the model. Each field is specified as a class attribute, and each attribute maps to a database column.
Person model would create a database table like this:
CREATE TABLE myapp_person ( "id" serial NOT NULL PRIMARY KEY, "first_name" varchar(30) NOT NULL, "last_name" varchar(30) NOT NULL );
Some technical notes:
- The name of the table,
myapp_person, is automatically derived from some model metadata but can be overridden. See Table names for more details.
idfield is added automatically, but this behavior can be overridden. See Automatic primary key fields.
CREATE TABLESQL in this example is formatted using PostgreSQL syntax, but it’s worth noting Django uses SQL tailored to the database backend specified in your settings file.
Once you have defined your models, you need to tell Django you’re going to use those models. Do this by editing your settings file and changing the
INSTALLED_APPS setting to add the name of the module that contains your
For example, if the models for your application live in the module
myapp.models (the package structure that is created for an application by the
manage.py startapp script),
INSTALLED_APPS should read, in part:
INSTALLED_APPS = [ #... 'myapp', #... ]