Django Models - Ambiguous-Squids/Bangazon_initial_site GitHub Wiki

Models

  • 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.

The basics:

  • Each model is a Python class that subclasses django.db.models.Model.
  • Each attribute of the model represents a database field.
  • With all of this, Django gives you an automatically-generated database-access API.

Basic example

This example model defines a Person, which has a first_name and last_name:

from django.db import models

class Person(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=30)
  • first_name and last_name are fields of the model.
  • Each field is specified as a class attribute, and each attribute maps to a database column.
  • The above 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
);

Using models

  • 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 models.py.
  • 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',
    #...
]
  • When you add new apps to INSTALLED_APPS, be sure to run manage.py migrate, optionally making migrations for them first with manage.py makemigrations.

Fields

  • The most important part of a model – and the only required part of a model – is the list of database fields it defines.
  • Fields are specified by class attributes.
  • Be careful not to choose field names that conflict with the models API like clean, save, or delete.
  • Example:
from django.db import models

class Musician(models.Model):
    first_name = models.CharField(max_length=50)
    last_name = models.CharField(max_length=50)
    instrument = models.CharField(max_length=100)

class Album(models.Model):
    artist = models.ForeignKey(Musician, on_delete=models.CASCADE)
    name = models.CharField(max_length=100)
    release_date = models.DateField()
    num_stars = models.IntegerField()