Published on

Django2.2LTSがリリースされチェック制約とユニーク制約機能が実装された

Authors

はじめに

2019年4月1日に、世界中が待望していたDjango2.2がリリースされました。 Django2.2は2系では初のLTSとして設計されており、リリースから少なくとも3年間に渡ってセキュリティや致命的なバグ、機能追加などが保証されています。 1系のLTSは2020年4月で終了するため、これを機に2系への移行も検討しては良いのでしょうか。

Pythonとの互換性

Django2.2ではPython3.5以降をサポートしています。

データベースの制約

チェック制約とユニーク制約が設定可能になりました。 この2つの制約は、データに整合性を適用するために使用します。

チェック制約

データの追加、更新時に値が指定している条件を満たしているかをチェックすることができます。 checkにはQオブジェクトを利用して制約をかけ、nameには制約名を設定します。

example
CheckConstraint(check=Q(age__gte=18), name='age_gte_18')

ユニーク制約

こちらの制約は、チェック制約に他のデータとの重複禁止の制約をかけたものです。 fieldsに制約をかけたいフィールド名を設定し、nameには制約名を設定します。

example
UniqueConstraint(fields=['room', 'date'], name='unique_booking')

さらに、conditionsを指定しておくことで、データ追加更新時に値への条件を指定することができます。

example
UniqueConstraint(fields=['user'], condition=Q(status='DRAFT')

参考

Django 2.2 released