Djangoの論理削除
こんにちは!縁紡ぐです。
データーを削除する方法にはデータベースから、本当に削除してしまい戻すことのできない物理削除と削除フラグを立てて削除扱いにする論理削除があります。
Django では、『django-boost』というライブラリーを使うと実装しやすくなります。MITライセンスで利用可能という、とても嬉しいライブラリーです。
目次
django-boostをインストールして設定する
ライブラリを使うと本当に実装するのに時間が短縮できるので、開発者もユーザー側もハッピーになるので利用しないなんてことは選択肢にありません👍
作って、そして無償で提供してくれる人に感謝です😀
インストール
それでは、さっそくインストールして実装していきましょう😀
pip install django-boost
たっとこれだけでインストールは完了です。
次は設定をしていきます。
settings.py のINSTALLED_AAPSに追加
設定ファイルの、インストールアプリに追加します。
INSTALLED_APPS = [ 'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django_boost', # 追加 ]
継承される LogicalDeletionMixin
LogicalDeletionMixinの中身をみるとどのようなことができるのかがとてもわかりやすいです。https://github.com/ChanTsune/django-boost のmodels/mixins.pyに記載があります。
class LogicalDeletionMixin(models.Model):
"""Provide logical delete."""
deleted_at = models.DateTimeField( verbose_name=_("deleted date"), blank=True, null=True, default=None, editable=False)
class Meta:
abstract = True
objects = LogicalDeletionManager()
@classmethod
def get_deleted_value(cls): return now()
# instance.delete 論理削除
# instance.delete(hard=True)
物理削除
def delete(self, using=None, keep_parents=False, hard=False):
if hard:
return super().delete(using=using, keep_parents=keep_parents)
self.deleted_at = self.get_deleted_value()
return self.save() # instance.revive 復活 def revive(self, force_update=False, using=None): """Revive logical deleted item.""" self.deleted_at = None return self.save() # 削除済み def is_dead(self): """Return True if the item is dead.""" return self.deleted_at is not None # 削除されていないもの def is_alive(self): """Return True if record is alive, otherwise False.""" return self.deleted_at is None
modelsで継承すれば使える
あとは、論理削除を使用したいテーブルに継承することで使えるようになります。
from django.db import models from django_boost.models.mixins import LogicalDeletionMixin class Model(LogicalDeletionMixin): field = models.IntegerField()
Djangoはスピード開発で生まれたフレームワーク
Djangoは、新聞の会社のためにつくられたフレームワークです。今日の出来事を明日の新聞に載せるという、時間に追われるためにつくられたのです。
システム開発も長く時間をかけるより、早めにリリースして使うことが大切です。そのあとに、本当に必要なものを追加する方が自分にフィットしたツールが作りやすいです。
コメント