如何存储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
相关产品推荐
相关产品推荐

