How To Build a Todo Application With Django | by Esther Vaati | Apr, 2022

Discover ways to construct CRUD net purposes

Picture by Anete Lūsiņa on Unsplash

A todo software is likely one of the purposes each developer ought to try and construct because it covers all of the generally used patterns in improvement, corresponding to:

On this tutorial, you’ll construct a completely functioning todo app with Django. It is possible for you to to do the next:

  • View all todo gadgets
  • Add a brand new todo merchandise
  • Replace todo merchandise
  • Delete todo merchandise

By the top of this tutorial, you’ll perceive these abilities:

  • Design your challenge earlier than you write any line of code.
  • The best way to create a digital atmosphere.
  • The best way to arrange your individual Django challenge.
  • Mannequin database relationships.
  • Carry out operations on a database corresponding to create, replace, learn and delete.
  • Render the info obtained from the database to a webpage.

Django is a high-level Python framework excellent for constructing advanced database-driven purposes. Do you know Django powers among the most well-known websites corresponding to Instagram?

Picture by Thomas Park on Unsplash


You must have already got

  • Python3 put in
  • Fundamental data of Python and Django

Having a thought technique of what to construct earlier than writing any code will prevent a number of complications sooner or later. For instance, the very first thing is to consider your database and ask these questions:

  • What’s going to my database appear to be?
  • What particulars do I must seize?
  • What properties does a to-do merchandise have?
  • What’s going to the interface appear to be?

Upon getting an adequately mapped-out design, then you can begin constructing.

Getting began

As at all times, it’s beneficial to create a digital atmosphere when working with Python initiatives to isolate challenge dependencies from the remainder of the system. So, create a listing and cd into it with this code:

mkdir TODO

Create a digital atmosphere with the venv module and activate it.

python3 -m venv env
supply env/bin/activate

Set up Django with pip.

pip set up Django

Create a brand new Django challenge referred to as todoapp.

django-admin startproject todoapp

Inside the brand new todoapp listing, create an app referred to as duties, as proven under:

cd todoapp
django-admin startapp duties

Django will create the next recordsdata for the challenge and your listing ought to appear to be this:

Add the duties app to the record of installed_apps in as proven under.

INSTALLED_APPS = [.....'tasks' #add this]


Django ships with SQLite, a light-weight database software. Should you want to use some other database, you could have choices corresponding to:

  • PostgreSQL
  • Mongo Db
  • Mysql, e.t.c


The belongings you need to retailer in your purposes (todo gadgets) are represented by fashions. Fashions, in flip, have attributes. For instance, the mannequin Person can have attributes corresponding to username, e-mail, and so forth.

On this tutorial, your database can have one mannequin, particularly:

Open duties/fashions and add the next code:

So, what’s taking place within the code above? Let’s break it down.

  • First, you outline the TaskItem mannequin, which can have the title, physique, due_data, and a boolean area that checks if the duty has been completed or not.
  • Subsequent, you outline a area class that takes an inventory of decisions: default, private, procuring, wishlist, and work.
  • Then you could have the __str__() methodology, which provides an “English-like” model of the thing of mannequin situations


All of the modifications you make to your fashions are affected by working migrations. So, run the migrations command.

python makemigrations
Migrations for 'duties':
- Create mannequin TaskItem

Subsequent is the migrate command, which can create the database tables.

python migrate
Operations to carry out:
Apply all migrations: admin, auth, contenttypes, periods, duties
Working migrations:
Making use of duties.0001_initial... OK

Django admin web site

The Django admin web site is a robust interface that makes it straightforward so as to add and handle information. The very first thing to do is create a superuser who will have the ability to add and delete information within the admin interface.

python createsuperuser
Username (depart clean to make use of 'earth'): admin
E-mail deal with:
Password (once more):
Superuser created efficiently

Subsequent, register the fashions within the admin app. Open the file and add the next code:

from django.contrib import adminfrom .fashions import TaskItem# Register your fashions right here.admin.web site.register(TaskItem)

Now run the event server and navigate to and log in with the superuser credentials. You must see one thing like this:

Now you may have the ability to add some information to work with.

Views in Django ship information to templates whereas the templates show the info. The most important benefit of utilizing Django is that it supplies built-in views that summary many of the underlying performance of CRUD operations. That’s what you’ll reap the benefits of.

Class-based generic views

The primary view will probably be a view that fetches all of the Process gadgets from the database. Open and add the next code:

ListView is a sort of generic view that can retrieve entries in an inventory. The category will want two properties: mannequin and template_name, and it’ll carry out all of the performance required to retrieve all of the TaskItem objects from the database. You now must create the todoitem_list.html template. Django will search for templates within the templates listing by default, so the file listing ought to comply with this conference:


Templating in Django

The view will present a context (object_list) that can talk with the template. The template will then use curly braces as a placeholder for information handed by Django. Open task-list.html and add the next code:


When a consumer requests a selected URL, Django will take that deal with, move it to the URL resolver after which match it to an inventory of patterns. If a match is discovered, it’s handed to the right view features. Open and add a URL sample that corresponds to the TodoItemListView we outlined above, as proven under:

The trail to view all of the Todo gadgets could be discovered at


Thus far, you could have been utilizing the admin interface so as to add to-do gadgets. However that’s not the perfect approach. You’ll want to add varieties to your net app to make it higher. Django comes with built-in ModelForm lessons that make it straightforward to create varieties from mannequin lessons. Create a file,, within the duties app, and add the next code:

The TaskItemCreate kind will mechanically generate kind fields for the fields outlined above

Create todo merchandise

You’ll nonetheless use Django’s built-in generic lessons to make this attainable. Open and create a view for creating a brand new to-do merchandise.

The one distinction between the primary view and the CreateTodoItemView is now you could have added two further properties, particularly a form_class and a success_url. A success_url defines the trail the place the consumer will probably be redirected after efficiently creating a brand new to-do merchandise.

Create the todoitemcreate_form.html template and add the code under:

Replace the URL as proven under:

Navigate to and add a brand new to-do merchandise.

Replace and delete todo merchandise

As seen from the above endpoints, generic lessons present most underlying performance. On this part, you’ll add the performance for updating and deleting a to-do merchandise. You’ll use the ideas realized, together with the next:

  • Create a kind from fashions
  • Create a view
  • Render the context information to an HTML web page

Open and add a kind for updating a to-do merchandise.

The one fields it’s worthwhile to replace are these specified within the Meta class.
Subsequent, create the views for updating and deleting to-do gadgets. Right here’s the code:

Create the corresponding templates




Replace the as follows:

The todo/replace/<pk> and todo/delete.<pk> paths will retrieve a to-do merchandise based mostly on its main key. For instance, if you wish to replace an occasion with id ==1, the trail will probably be

To delete a to-do merchandise, navigate to

Your software now performs what it’s meant for, that’s, you may view, create, replace and delete to-do gadgets.

Should you appreciated studying this, you may get pleasure from these articles:

More Posts