Learn how to manage a new model in Django - free sample included.
This page explains how to create and USE a model in Django. All commands used to code the project and also the relevant updates are listed below. For newcomers, Django is a high-level Python Web framework that encourages rapid development and clean, pragmatic design. Built by experienced developers, it takes care of much of the hassle of Web development, so you can focus on writing your app without needing to reinvent the wheel.
Inside the new directory, we will invoke startproject subcommand
Note: Take into account that . at the end of the command.
Setup the database
Start the app
At this point we should see the default Django page in the browser:
Django - Default Project Page.
Create a new Django app
Visualize the default SQL settings - config/settings.py
Define a new modelBooks in sample application. The below changes should be added to sample/models.py:
Tip - for a quick check over the latest changes we can run check subcommand.
Generate the SQL code (migrate the database).
Apply changes on the database
Use the model via CLI
Once the model is created we can use it via the Django shell:
List all books (using the CLI)
We can see our new book returned by the query. Let's improve the information that describes the object.
Django Model - add text representation of an object
To achieve this goal, we should define the __str__() method for the Book model
Let's restart the Django console and check the results:
Use the model via Admin Section
Django comes with an admin section out-of-the-box that allows us to manage with ease all models defined in the project. To manage the Book model in the administration console we need to create a superuser (aka the admin) and after register the Book model to be visible in the admin section.
Create the superuser
Register Book model to be visible in the admin section - Edit sample/admin.py as below:
Authenticate as admin - http://localhost:8000/admin/
At this point, we should see the Books model in the UI and able to execute CRUD operations.
# File: sample/models.py
from django.db import models
class Book(models.Model): # <- NEW
title = models.CharField(max_length=100) # <- NEW
author = models.CharField(max_length=100) # <- NEW
publication_date = models.DateField() # <- NEW
$ python manage.py check
System check identified no issues (0 silenced).
$ python manage.py makemigrations # generate the SQL code
Migrations for 'sample':
sample\migrations\0001_initial.py
- Create model Book
$ python manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, contenttypes, sample, sessions
Running migrations:
Applying sample.0001_initial... OK
$ python manage.py shell
>>>
>>> from sample.models import Book # import the Book model in our context
>>> from django.utils import timezone # used to provide the value for publication_date
>>>
>>> book1 = Book(title='The Adventures of Tom Sawyer', author='Mark Twain', publication_date=timezone.now() )
>>> book1.save() # save the new book
$ python manage.py shell
>>>
>>> from sample.models import Book
>>> Book.objects.all()
<QuerySet [<Book: Book object (1)>]>
# File: sample/models.py
from django.db import models
class Book(models.Model):
title = models.CharField(max_length=100)
author = models.CharField(max_length=100)
publication_date = models.DateField()
def __str__(self): # <- NEW
return self.title # <- NEW
$ python manage.py shell
>>>
>>> from sample.models import Book
>>> Book.objects.all()
<QuerySet [<Book: The Adventures of Tom Sawyer>]>
$ python manage.py createsuperuser
sername (leave blank to use 'sm0ke'): admin
Email address: admin@appseed.us
Password:
Password (again):
Superuser created successfully.
# File: sample/admin.py
from django.contrib import admin
from .models import Book # <- NEW
admin.site.register(Book) # <- NEW