Django 論理削除を実装できる『django-boost』

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は、新聞の会社のためにつくられたフレームワークです。今日の出来事を明日の新聞に載せるという、時間に追われるためにつくられたのです。

システム開発も長く時間をかけるより、早めにリリースして使うことが大切です。そのあとに、本当に必要なものを追加する方が自分にフィットしたツールが作りやすいです。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

「@縁紡ぐ」にご訪問頂きありがとうございます。
業務改善やIT化、システム開発・プロジェクトチーム運用支援を行っています。
お気軽にご相談ください。

コメント

コメントする

CAPTCHA


目次