管理Django的创建者、创建日期、更新者和更新日期
环境:
Windows 11 家庭版
Python 3.10.2
Django 4.0.2
使用 venv
(PyPI)
文章中包含安装方法
条件:相关文章的第一回已完成
相关文章
Django 第1節:创建 Django 自定义用户模型
Django 第2節:强制在 Django 初次登录时更改密码
Django 第3節:强制在一定时间内未更改密码的用户进行密码修改
Django 第4節:生成随机且有有效期限的URL,经上级批准后发行账号
Django 第5節:通过密码尝试次数锁定和使用随机且有有效期限的URL进行本人确认以解除锁定
背景 – (Background)

ulid-py 安装方式

使用pip命令来安装
pip安装ulid-py库
只需一种可能性,将以下内容以中文原生方式改写:安装django-currentuser。
在注册创建者和更新者时,将其设定为当前登录的用户。
为了获取用户,需要安装以下内容。
使用pip命令安装django-currentuser。
在settings.py中注册中间件。
MIDDLEWARE = (
...,
'django_currentuser.middleware.ThreadLocalUserMiddleware',
)
创建应用程序
创建Django应用程序。在这里,polls是应用程序的名称,可以随意更改。本次项目选择了polls,所以请将整个文本都相应地更改一下。使用Python命令管理工具运行 `manage.py`,并创建polls应用。
将在settings.py文件中创建的polls注册
INSTALLED_APPS = [
...,
'polls',
]
在应用程序中添加模型
from django_currentuser.db.models import CurrentUserField
from django.db import models
import ulid
class Polls(models.Model):
id = models.CharField(primary_key=True, default=ulid.new, max_length=26, editable=False)
name = models.CharField(verbose_name="名前", max_length=50)
created_by = CurrentUserField(verbose_name="作成者", editable=False, related_name="create_polls")
create_date = models.DateTimeField(verbose_name="作成日時", auto_now_add=True)
updated_by = CurrentUserField(verbose_name="更新者", editable=False, related_name="update_polls", on_update=True, )
update_date = models.DateTimeField(verbose_name="更新日時", auto_now=True)
请注意,create_date属性是使用auto_now_add创建的,而update_date属性是使用auto_now创建的。
将应用程序添加到管理界面
from django.contrib import admin
from .models import Polls
class PollsAdmin(Polls):
class Meta:
verbose_name = ("Polls")
verbose_name_plural = ("Polls")
@admin.register(PollsAdmin)
class PollsGroupAdmin(admin.ModelAdmin):
ordering = ["id",]
list_display = ["id", "name", "created_by", "create_date", "updated_by", "update_date"]
search_fields = ["id", "name"]
readonly_fields = ["id", "created_by", "create_date", "updated_by", "update_date"]
fieldsets = (
("基本情報", {
"fields":("id", "name", ),
}),
("更新履歴", {
"fields":("created_by", "create_date", "updated_by", "update_date", ),
}),
)

应用程序的迁移

运行以下命令进行数据库迁移:python manage.py migrate
运行以下命令启动服务器:python manage.py runserver
验证动作




请注意
创建者、更新者似乎都不支持在admin.py的search_fields中。