管理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)

image.png

ulid-py 安装方式

image.png

使用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", ),
        }),        
    )
image.png

应用程序的迁移

image.png

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

验证动作

image.png
image.png
image.png
image.png

请注意

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

bannerAds