You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何存储Django Admin中修改或创建模型记录的操作用户

Django Admin记录操作用户实现方案

1. 调整模型字段定义

首先修正原模型的外键配置,解决字段冲突和迁移兼容问题:

# models.py
from django.db import models
# 引用项目用户模型,兼容自定义用户表场景
from django.contrib.auth import get_user_model
UserModel = get_user_model()

class Links(models.Model):
    link = models.URLField(unique=True)
    created_at = models.DateTimeField(auto_now_add=True)
    # 新增on_delete约束、null兼容已有数据、related_name避免反向查询冲突
    created_by = models.ForeignKey(UserModel, on_delete=models.SET_NULL, null=True, related_name="link_creators")
    updated_at = models.DateTimeField(auto_now=True)
    updated_by = models.ForeignKey(UserModel, on_delete=models.SET_NULL, null=True, related_name="link_updaters")

2. 配置Admin管理类

在对应app的admin.py中重写save_model方法,自动获取当前登录用户填充到操作字段:

# admin.py
from django.contrib import admin
from .models import Links

@admin.register(Links)
class LinksAdmin(admin.ModelAdmin):
    # 将操作人、时间字段设为只读,避免用户手动修改篡改数据
    readonly_fields = ["created_by", "updated_by", "created_at", "updated_at"]
    # 列表页可配置展示操作人字段,方便溯源
    list_display = ["link", "created_at", "created_by", "updated_at", "updated_by"]

    def save_model(self, request, obj, form, change):
        # change为False时代表是新增记录,填充创建人
        if not change:
            obj.created_by = request.user
        # 所有保存操作都更新修改人
        obj.updated_by = request.user
        # 执行原生保存逻辑
        super().save_model(request, obj, form, change)

3. 生效配置

执行以下命令完成模型字段迁移:

python manage.py makemigrations
python manage.py migrate

迁移完成后所有通过Django Admin完成的新增、修改操作都会自动记录对应的操作用户:

  • 该方案仅对Django Admin内的操作生效,符合所有数据都通过Admin操作的业务场景
  • 操作字段设为只读,避免人工修改保证记录真实性

内容的提问来源于stack exchange,提问作者Debdut Goswami

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 05:00:02