While it can be a complex process at times, upgrading to the latest Django version has several benefits:
Here are some things to consider to help make your upgrade process as smooth as possible.
If it’s your first time doing an upgrade, it is useful to read the guide on the different release processes.
Afterwards, you should familiarize yourself with the changes that were made in the new Django version(s):
Pay particular attention to backwards incompatible changes to get a clear idea of what will be needed for a successful upgrade.
In most cases it will be necessary to upgrade to the latest version of your Django-related dependencies as well. If the Django version was recently released or if some of your dependencies are not well-maintained, some of your dependencies may not yet support the new Django version. In these cases you may have to wait until new versions of your dependencies are released.
Once you’re ready, it is time to install the new Django version. If you are using virtualenv and it is a major upgrade, you might want to set up a new environment with all the dependencies first.
Exactly which steps you will need to take depends on your installation process. The most convenient way is to use pip with the --upgrade or -U flag:
$ pip install -U Django
pip also automatically uninstalls the previous version of Django.
If you use some other installation process, you might have to manually uninstall the old Django version and should look at the complete installation instructions.
When the new environment is set up, run the full test suite for your application. In Python 2.7+, deprecation warnings are silenced by default. It is useful to turn the warnings on so they are shown in the test output (you can also use the flag if you test your app manually using manage.py runserver):
$ python -Wall manage.py test
After you have run the tests, fix any failures. While you have the release notes fresh in your mind, it may also be a good time to take advantage of new features in Django by refactoring your code to eliminate any deprecation warnings.
When you are sufficiently confident your app works with the new version of Django, you’re ready to go ahead and deploy your upgraded Django project.
If you are using caching provided by Django, you should consider clearing your cache after upgrading. Otherwise you may run into problems, for example, if you are caching pickled objects as these objects are not guaranteed to be pickle-compatible across Django versions. A past instance of incompatibility was caching pickled HttpResponse objects, either directly or indirectly via the cache_page() decorator.
Dec 16, 2014