Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Incorrect rendering of history entry (with editable fields) if changing is disallowed #1362

Open
stefan6419846 opened this issue Jun 27, 2024 · 1 comment

Comments

@stefan6419846
Copy link

Describe the bug

Opening a specific entry from the history shows the fields as editable, although there are no change permissions and there is no save button.

To Reproduce

Consider an admin page defined like this:

from django.contrib import admin
from .models import Package
from simple_history.admin import SimpleHistoryAdmin


class ReadonlyHistoryAdmin(SimpleHistoryAdmin):
    def has_add_permission(self, request):
        return False

    def has_change_permission(self, request, obj=None):
        return False

    def has_delete_permission(self, request, obj=None):
        return False


admin.site.register(Package, ReadonlyHistoryAdmin)

If relevant: SIMPLE_HISTORY_REVERT_DISABLED = True is set.

Steps to reproduce the behavior:

  1. Go to http://localhost:8000/admin/app_name/package/
  2. Open a package: http://localhost:8000/admin/app_name/package/4/change/
  3. Open the history: http://localhost:8000/admin/app_name/package/4/history/
  4. Open a specific version in history: http://localhost:8000/admin/app_name/package/4/history/6/

Expected behavior

The specific version is shown as read-only form and does not allow saving.

Screenshots

Regular view:

ksnip_20240627-150348

Historic view:

ksnip_20240627-150425

Environment

  • OS: OpenSUSE Leap
  • Browser (if applicable): Firefox 115.6.0esr
  • Django Simple History Version: 3.7.0
  • Django Version: 4.2.13
  • Database Version: PostgreSQL 13.14

Additional context

Additionally, it seems like the rendering of at least the heading is slightly different.

@cfdbwrbq
Copy link

also
if class looks something like this

class SomeClass(models.Model):
    name=models.CharField(editable=False)
    ...
    def __str__(self):
        return self.name

in admin interface history link crashes with error

TypeError at /admin/model/1/history/__str__ returned non-string (type of NoneType)

but the name value of object definitely exists.
and if remove __str__ function - OK, history is showing...

fetzig added a commit to fetzig/django-simple-history that referenced this issue Oct 14, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants