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

