From http://www.djangobook.com/en/2.0/chapter03.html