Django バージョン変更点まとめ (2.1 から 6.0 まで)
2026/05/08 - ~
バージョン一覧
| バージョン | リリース日 | サポート終了日 | 備考 |
|---|---|---|---|
| 6.0 | 2025年12月 | 2027年4月(予定) | |
| 5.2 | 2025年4月 | 2028年4月 | LTS |
| 5.1 | 2024年8月 | 2025年12月 | |
| 5.0 | 2023年12月 | 2025年4月 | |
| 4.2 | 2023年4月 | 2026年4月 | LTS |
| 4.1 | 2022年8月 | 2023年12月 | |
| 4.0 | 2021年12月 | 2023年4月 | |
| 3.2 | 2021年4月 | 2024年4月 | LTS |
| 3.1 | 2020年8月 | 2021年12月 | |
| 3.0 | 2019年12月 | 2021年4月 | |
| 2.2 | 2019年4月 | 2022年4月 | LTS |
| 2.1 | 2018年8月 | 2019年4月 |
- Supported Versions 約 8ヶ月周期で新バージョンがリリースされる。Mainstream Support 8 ヶ月+Extended Support 3 年(LTS) or 約 8 ヶ月(non LTS)。
- どのバージョンの Python で Django が使えますか?
Django 5.2 → 6.0
新機能
- CSP(Content Security Policy)の組み込みサポート
- テンプレートパーシャル(
{% partialdef %}/{% partial %}タグ) - Tasks フレームワーク(バックグラウンドタスクの組み込みサポート)
- メール処理が Python のモダン Email API ベースに刷新
破壊的変更
Python 3.12 以上が必須。Python 3.10 / 3.11 は 5.2 が最後。
MariaDB 10.5 のサポート終了。MariaDB 10.6 以上が必要。
cx_Oracle が完全削除。Oracle DB を使っている場合は oracledb に移行する。
メール関連クラスの内部実装が変更。EmailMessage / EmailMultiAlternatives のカスタムサブクラスを作っている場合は message() の戻り値の型が変わっているので要確認。
Django 5.1 → 5.2(LTS)
新機能
shellコマンドが全インストール済みアプリのモデルを自動インポート- 複合主キーのサポート改善
破壊的変更
PostgreSQL 13 のサポート終了。PostgreSQL 14 以上が必要。
MySQL のデフォルト文字コードが変更。utf8 → utf8mb4 に変更。旧来の utf8mb3 が必要なレガシー DB は OPTIONS で明示指定が必要。
EmailMultiAlternatives.alternatives への直接追加が非サポートに。attach_alternative() を使う。
# Before
msg.alternatives.append(('...', 'text/html'))
# After
msg.attach_alternative('...', 'text/html')
Django 5.0 → 5.1
新機能
{% querystring %}テンプレートタグが追加- QuerySet に
acontains()等の非同期メソッドが充実
破壊的変更
PostgreSQL 12 のサポート終了。PostgreSQL 13 以上が必要。
MariaDB 10.4 のサポート終了。MariaDB 10.5 以上が必要。
admin のフィルター HTML が変更。changelist フィルターが <div> → <nav> タグに変更。admin テンプレートをカスタマイズしている場合は要確認。
Django 4.2 → 5.0
新機能
- 非同期認証関数が追加(
aauthenticate()/alogin()/alogout()等) - Admin の changelist でファセットカウントを表示可能に
- フォームの
<div>ベースレンダリングがデフォルトに(as_table()/as_p()は非推奨)
破壊的変更
Python 3.10 以上が必須。Python 3.8 / 3.9 は 4.2 が最後。
pytz サポートが完全削除。4.0 で追加した移行期設定 USE_DEPRECATED_PYTZ = True が使えなくなる。残っている箇所を zoneinfo に書き換える。
# Before
import pytz
tz = pytz.timezone('Asia/Tokyo')
# After
from zoneinfo import ZoneInfo
tz = ZoneInfo('Asia/Tokyo')
USE_TZ のデフォルトが True に変更。明示的に USE_TZ = False を設定していない場合、タイムゾーン対応が有効になる。
cx_Oracle が非推奨に。Oracle DB を使っている場合は oracledb への移行準備を始める(6.0 で完全削除)。
Django 4.1 → 4.2(LTS)
新機能
STORAGES設定でファイルストレージを複数設定可能に- Admin のカラーテーマ(ライト/ダーク)を UI 上で切り替え可能に
InMemoryStorageクラスが追加(テスト高速化)makemigrations --updateオプションが追加- Python 3.12 のサポート追加
破壊的変更
STORAGES 設定への移行。DEFAULT_FILE_STORAGE と STATICFILES_STORAGE が非推奨になった。
# Before
DEFAULT_FILE_STORAGE = 'django.core.files.storage.FileSystemStorage'
STATICFILES_STORAGE = 'django.contrib.staticfiles.storage.StaticFilesStorage'
# After
STORAGES = {
'default': {'BACKEND': 'django.core.files.storage.FileSystemStorage'},
'staticfiles': {'BACKEND': 'django.contrib.staticfiles.storage.StaticFilesStorage'},
}
Django 4.0 → 4.1
新機能
- クラスベースビューで非同期 HTTP ハンドラが定義可能に
- QuerySet に非同期インターフェース追加(
acreate()/aget()等) - フォームが
<div>ベースレンダリングに対応(as_div()追加)
破壊的変更
Admin の検索挙動が変わった。changelist で複数の検索語を入力したとき、以前は「いずれかにマッチ」すれば返していたが、「全てにマッチ」する行だけ返すようになった。search_fields に複数フィールドを設定している admin は動作確認が必要。
Django 3.2 → 4.0
新機能
- 非同期キャッシュ API(
aget()/aset()等) USE_L10NのデフォルトがFalse→Trueに変更
破壊的変更
pytz → zoneinfo への移行(最重要)。zoneinfo がデフォルトのタイムゾーン実装になった。移行期の一時措置として USE_DEPRECATED_PYTZ = True を設定できるが、5.0 で削除されるため早めに対応する。
CSRF_TRUSTED_ORIGINS にスキームが必須。
# Before
CSRF_TRUSTED_ORIGINS = ['.example.com']
# After
CSRF_TRUSTED_ORIGINS = ['https://*.example.com']
DeleteView の変更。FormMixin を使うようになったため、カスタム削除ロジックは form_valid() に移動する。
Python 3.8 以上が必要。
Django 3.1 → 3.2(LTS)
新機能
- AppConfig 自動検出(
default_app_configが不要に) DEFAULT_AUTO_FIELD設定の導入- Admin の
@display/@actionデコレーターが追加
破壊的変更
DEFAULT_AUTO_FIELD の明示設定が必要。設定しないと警告が大量に出る。既存プロジェクトは AutoField を指定する。
DEFAULT_AUTO_FIELD = 'django.db.models.AutoField'
default_app_config が非推奨。__init__.py に書いていた default_app_config = '...' は削除してよい。
Python 3.6 / 3.7 のサポートが終了。Python 3.8 以上が必要。
Django 3.0 → 3.1
新機能
- 非同期 View・ミドルウェアのサポート
JSONFieldが全 DB で使えるようになった(PostgreSQL 専用から標準化)- Admin 画面にナビゲーションサイドバーが追加
破壊的変更
django.contrib.postgres.fields.JSONField が非推奨。標準の django.db.models.JSONField に移行する。
# Before
from django.contrib.postgres.fields import JSONField
# After
from django.db.models import JSONField
Django 2.2 → 3.0
新機能
- ASGI 対応(非同期アプリとして動かせるようになった)
- MariaDB 10.1 以上を正式サポート
TextChoices/IntegerChoicesで Enum を使った choices 定義が可能に
破壊的変更
url() → path() への書き換え(必須)。django.conf.urls.url() が非推奨になった。
# Before
from django.conf.urls import url
urlpatterns = [
url(r'^articles/(?P<pk>[0-9]+)/$', views.article_detail),
]
# After
from django.urls import path
urlpatterns = [
path('articles/<int:pk>/', views.article_detail),
]
正規表現が必要な場合は re_path() を使う。
ugettext() 系が非推奨。gettext() 系に書き換える。
Python 3.5 のサポートが終了。Python 3.6 以上が必要。
Django 2.1 → 2.2(LTS)
新機能
CheckConstraint/UniqueConstraintで DB レベルのカスタム制約が定義可能にmigrate --planオプションで実行予定のマイグレーション操作を確認可能にHttpRequest.headersでリクエストヘッダに簡単アクセス可能に
破壊的変更
urlsafe_base64_encode() の戻り値が変わった。bytestring ではなく string を返すようになった。パスワードリセット周りのカスタム実装がある場合は確認する。
Group.name の最大長が変更。80 文字 → 150 文字。migration が自動生成されるので適用する。
NullBooleanSelect の option 値が変わった。1/2/3 → unknown/true/false に変更。
依存パッケージの最小バージョン引き上げ。mysqlclient 1.3.13 以上、SQLite 3.8.3 以上、sqlparse 0.2.2 以上が必要。
非推奨(次バージョンまでに対応)
ugettext() / ugettext_lazy() 等が非推奨になった。gettext() / gettext_lazy() に書き換えておく。
# Before
from django.utils.translation import ugettext as _
# After
from django.utils.translation import gettext as _