Exercise: http://djangobook.py3k.cn/2.0/chapter03/