What is a django model?

To put the app online you can use PythonAnywhere. You point it at your code, it runs the app for you and there is no server to set up yourself.

A model is a class that matches a database table (or collection).
Models are defined in the apps models.py file, /app/models.py.

Say what? Let’s make an app with a database model!

Models example

We start a new project, movie database.

django-admin startproject movie_site

Inside the directory movie_site we now see:

manage.py movie_site

Configure database

Open movie_site/settings.py, there are the lines:

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}

A database is already set up!

We’ll use the default database system: sqlite3.


Note: Django supports many databases including:

- SQLite (django.db.backends.sqlite3)
- MySQL (django.db.backends.mysql)
- MongoDB (django_mongodb_engine)
- Oracle (django.db.backends.oracle)* PostGreSQL (django.db.backends.postgresql_psycopg2)
- NoSQL DB

Create your database with this command:

python manage.py migrate

Now you’ll see lots of lines:
“


Operations to perform:
Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
Applying contenttypes.0001_initial… OK
Applying auth.0001_initial… OK
Applying admin.0001_initial… OK
Applying admin.0002_logentry_remove_auto_add… OK
Applying contenttypes.0002_remove_content_type_name… OK
Applying auth.0002_alter_permission_name_max_length… OK
Applying auth.0003_alter_user_email_max_length… OK
Applying auth.0004_alter_user_username_opts… OK
Applying auth.0005_alter_user_last_login_null… OK
Applying auth.0006_require_contenttypes_0002… OK
Applying auth.0007_alter_validators_add_error_messages… OK
Applying auth.0008_alter_user_username_max_length… OK
Applying sessions.0001_initial… OK

Good job!

Create an app

Django sites can have many apps. Each app is like a plugin.

Let’s make a movie details app.
“

python manage.py startapp movies

You have just created an app!
There’s a new folder: movies.

Note: Django doesn’t know it should use this app yet.
Apps are not added by default.. Let’s teach django.

Open movie_site/settings.py.
Scroll down to the line INSTALLED_APPS and add the line ‘movies’.

Create a movie model

We can create our model now. In the movies/models.py you can define all models.
Create a class for your movies model. The class will map to the database table.

If you don’t know classes and object orientated programming, take this couse:

We class will contain attributes of our movie object.

from django.db import models

# Create your models here.
from django.db import models
from django.utils import timezone

class Movie(models.Model):
author = models.ForeignKey('auth.User')
title = models.CharField(max_length=200)
text = models.TextField()
created_date = models.DateTimeField(
default=timezone.now)

def publish(self):
self.published_date = timezone.now()
self.save()

def __str__(self):
return self.title

Run the command;

python manage.py makemigrations movies

This will output:

Migrations for ‘movies’:
movies/migrations/0001_initial.py
- Create model Movie

Also type this command:
python manage.py migrate movies

The magic continues:
Operations to perform:
Apply all migrations: movies
Running migrations:
Applying movies.0001_initial… OK

In English, that means it’s just created our database table!

Browse database

Open the database file (db.sqlite3) with sqlitebrowser.

django database model

Yeehaw! Our movie model is now our database.

Want more practice on this? Practise this on PyChallenge, there are short browser exercises you can run right after reading.