Skip to content

Commit

Permalink
Expose change reason to admin form
Browse files Browse the repository at this point in the history
Fixes #853
  • Loading branch information
mjsir911 committed Aug 19, 2023
1 parent 4b22c58 commit 12ca6c9
Show file tree
Hide file tree
Showing 4 changed files with 40 additions and 1 deletion.
1 change: 1 addition & 0 deletions AUTHORS.rst
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,7 @@ Authors
- Lucas Wiman
- Maciej "RooTer" Urbański
- Marcelo Canina (`marcanuy <https://github.com/marcanuy>`_)
- Marco Sirabella
- Mark Davidoff
- Martin Bachwerk
- Marty Alchin
Expand Down
1 change: 1 addition & 0 deletions CHANGES.rst
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ Unreleased
``HistoricalRecords.context.request``) under some circumstances (gh-1188)
- Made ``HistoryRequestMiddleware`` async-capable (gh-1209)
- Fixed error when setting ``table_name`` with ``inherit=True`` (gh-1195)
- Allow setting change reason on admin panel modifications (gh-??)

3.3.0 (2023-03-08)
------------------
Expand Down
25 changes: 24 additions & 1 deletion simple_history/admin.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
from django import http
from django import forms, http
from django.apps import apps as django_apps
from django.conf import settings
from django.contrib import admin
from django.contrib.admin import helpers
from django.contrib.admin.utils import unquote
from django.contrib.auth import get_permission_codename, get_user_model
from django.core.exceptions import PermissionDenied
from django.forms import fields
from django.shortcuts import get_object_or_404, render
from django.urls import re_path, reverse
from django.utils.encoding import force_str
Expand Down Expand Up @@ -224,9 +225,31 @@ def render_history_view(self, request, template, context, **kwargs):

def save_model(self, request, obj, form, change):
"""Set special model attribute to user for reference after save"""
obj._change_reason = form.cleaned_data["change_reason"]
obj._history_user = request.user
super().save_model(request, obj, form, change)

class form(forms.ModelForm):
change_reason = forms.CharField(required=False)

def get_fields(self, request, obj=None):
return [
field
for field in super().get_fields(request, obj)
if field != "change_reason"
]

def get_fieldsets(self, request, obj=None):
return super().get_fieldsets(request, obj) + [
(
"History",
{
"classes": ["collapse"],
"fields": ["change_reason"],
},
)
]

@property
def content_type_model_cls(self):
"""Returns the ContentType model class."""
Expand Down
14 changes: 14 additions & 0 deletions simple_history/tests/tests/test_admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -218,6 +218,20 @@ def test_history_user_on_save_in_admin(self):
[p.history_user for p in Poll.history.all()], [self.user, self.user]
)

def test_history_change_reason_on_save_in_admin(self):
self.login()

change_reason = "New change reason"
# Ensure polls created via admin interface save correct user
poll_data = {
"question": "new poll?",
"pub_date_0": "2012-01-01",
"pub_date_1": "10:00:00",
"change_reason": change_reason,
}
self.client.post(reverse("admin:tests_poll_add"), data=poll_data)
self.assertEqual(Poll.history.get().history_change_reason, change_reason)

def test_underscore_in_pk(self):
self.login()
book = Book(isbn="9780147_513731")
Expand Down

0 comments on commit 12ca6c9

Please sign in to comment.