Django

Django 作成者・作成日時・更新者・更新日時を簡単に実装

システムはだいたい、作成者と作成日時、更新者と更新日時を持っています。なんでなんだろう?まぁ、だれが間違えたのかの犯人捜しのためかな?

実装するためのパッケージがあったので導入しようと思います。

https://github.com/PaesslerAG/django-currentuser

この中にREADME.rstに手順が書いています。

まずは、インストールです。

インストール

pip install django-currentuser

これで、インストールができています。

Settingファイルのミドルウェアに追記する

settings.pyファイルのMIDDLEWAREに追記します

'django_currentuser.middleware.ThreadLocalUserMiddleware',

modelsに追記する

from accounts.models import *
from django_currentuser.db.models import CurrentUserField
from django_currentuser.middleware import (
    get_current_user, get_current_authenticated_user)

class M_Shisetsu(models.Model):
    id = models.AutoField(verbose_name='施設ID',primary_key=True)
    name = models.CharField(verbose_name='施設名', max_length=50)
    adress = models.CharField(verbose_name='住所', max_length=100)
    phone = models.CharField(verbose_name='電話番号', max_length=15) 
    fax = models.CharField(verbose_name='FAX番号', max_length=15)
    color = ColorField(verbose_name='表示色', default='#FF0000')
    yakan_kinmu = models.IntegerField(verbose_name='夜間必要者数', default=0)
    display_number= models.IntegerField(verbose_name='表示順', blank=True, null=True, default=0, validators=[MinValueValidator(0), MaxValueValidator(100)])
    deleted = models.BooleanField(verbose_name='論理削除フラグ', default=False)
    create_date = models.DateTimeField(verbose_name='登録日時', auto_now_add=True)
    created_by = CurrentUserField(verbose_name='登録者', related_name='create')
    update_date = models.DateTimeField(verbose_name='更新日時', auto_now=True)
    update_by = CurrentUserField(verbose_name='更新者', on_update=True, related_name='update')

    def save(self, *args, **kwargs):
        self.updated_by = get_current_authenticated_user()
        super(M_Shisetsu, self).save(*args, **kwargs)

    class Meta:
        ordering = ["display_number"] 
        verbose_name = '施設マスタ'

    def __str__(self):
        return self.name

これで登録日時、登録者、更新日時、更新者が自動で更新されます。

更新できているか確認

アドミン画面でデータを作成して更新してみました。

みごとに作成時間と更新時間、更新者が別でもっています。update_by_idも別ユーザーで更新すると、1から2に変わっています。

-Django

© 2021 ごろう@縁紡ぐ