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

如何在Django Admin面板中传递django-simple-history的变更原因

在Django Admin中为django-simple-history填充变更原因字段

完全可以实现,只需要自定义Django Admin的表单和模型管理类,把Admin面板里输入的变更原因传递给django-simple-history的记录逻辑就行,具体操作步骤如下:

1. 自定义Admin表单,添加变更原因输入框

先给你的模型对应的Admin表单加一个用于输入变更原因的字段:

from django import forms
from .models import 你的模型类名

class 你的模型AdminForm(forms.ModelForm):
    change_reason = forms.CharField(
        label="变更原因",
        required=False,
        widget=forms.Textarea(attrs={'rows': 3})
    )

    class Meta:
        model = 你的模型类名
        fields = '__all__'

2. 重写Admin模型管理类的保存方法

继承SimpleHistoryAdmin,并重写save_model方法,把表单里的变更原因传入对象保存时的change_reason参数:

from django.contrib import admin
from simple_history.admin import SimpleHistoryAdmin
from .models import 你的模型类名
from .forms import 你的模型AdminForm

class 你的模型Admin(SimpleHistoryAdmin):
    form = 你的模型AdminForm

    def save_model(self, request, obj, form, change):
        # 提取表单里填写的变更原因
        reason = form.cleaned_data.get('change_reason')
        # 保存对象时传递变更原因给django-simple-history
        obj.save(change_reason=reason)
        # 调用父类的保存方法完成后续逻辑
        super().save_model(request, obj, form, change)

admin.site.register(你的模型类名, 你的模型Admin)

这样配置后,在Django Admin修改该模型的对象时,页面会多出一个“变更原因”的输入框,填写内容后保存,django-simple-history就会把这个原因自动记录到对应的历史字段里(默认字段名是history_change_reason)。

注意事项

  • 你使用的2.7.0版本官方文档明确支持save方法的change_reason参数,直接使用即可
  • 将变更原因设为非必填(required=False),避免强制用户每次修改都必须填写原因

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 03:20:14