Just as a tip, it might be easier to do a progressive upgrade, i.e. move to 1.5 -> 1.6 -> 1.7 -> 1.8 on older code bases. This way you will get deprecation warning, instead of failure. IIRC Django moves from deprecation to removal in two releases.
On a side note, it is also a good time to try out Python 3, as most packages now support both 2 and 3.
Django 1.5 is no longer supported (even for security patches), 1.6 will only receive security and data loss bug fixes after 1.8 is released, and (IMHO) upgrading from 1.4 to 1.6 (or esp 1.7) is almost as difficult and time consuming as just going straight to 1.8, whereas upgrading from 1.4 to 1.5 was a breeze.
Python 3 is wonderful to work with now, compared to just a year ago. Django's support for Python 3 really helped speed up the ultra-slow process of getting many of the popular libraries to support it. IOW, now is a great time to start using Python 3 for new projects.
I'm in the middle of this process, but from an even older version.
Since 1.7 introduced migrations, I recommend upgrading to 1.6 first and getting your South migrations caught up with third party apps. Some may have data and schema migrations e.g. django-photologue. Then jump to 1.7 or 1.8.
You'll likely have to update your requirements.txt with the latest packages, so you'll want to see if they're compatible with the version you're upgrading to.
I recommend keeping it up-to-date with every release if possible. Much easier to make incremental updates than spend months on upgrading 4 major versions.
See my comment above, pertaining supported versions, etc.
Do try out migrations in 1.8, btw. When Andrew Godwin migrated them into Django, a lot of things were changed, and now migrations are truly great to work with.