# Upgrade Django v1.9.x

## Release Highlights

- Password validation framework
- The Django admin got a facelift to it's design
- Ability to run tests in parallel
- Mixins for Class Based Views, like `LoginRequiredMixin` for example

## Upgrade Gotchas

- Multiple features [deprecated in 1.7](https://docs.djangoproject.com/en/dev/releases/1.7/#deprecated-features-1-7
) were [removed in 1.9](https://docs.djangoproject.com/en/dev/releases/1.9/#features-removed-in-1-9), so a number of imports will change. This includes many modules from:
    - `django.utils.*`
    - Many `django.*.util` [modules](https://docs.djangoproject.com/en/4.1/releases/1.7/#util-modules-renamed-to-utils) that provided backwards compatibility
    - One key example is the `TestCase` class moving from `django.utils.unittest` to `django.test`.

- `django.core.cache.get_cache` replaced by `django.core.cache.caches`
- If a model is defined [outside of an application](https://docs.djangoproject.com/en/4.1/releases/1.9/#features-removed-in-1-9) in INSTALLED_APPS, [it must declare which app it belongs to](https://docs.djangoproject.com/en/1.10/ref/models/options/#django.db.models.Options.app_label) via an `app_label` value. One common scenario is in tests, but there maybe others.
- If you're upgrading from something older than this, you should upgrade to at least the next [LTS release](https://upgradedjango.com/1.11/). It will have more security and bug fixes because of the [extended support](https://www.djangoproject.com/download/#ft2) period.

Source: https://upgradedjango.com/1.9/
