Permission to view, but not to change! - Django
You can't just view things in django admin.
There is a databrowse app for that.
Update: Since Django 2.1 this is now built-in.
In admin.py
# Main reusable Admin class for only viewing
class ViewAdmin(admin.ModelAdmin):
"""
Custom made change_form template just for viewing purposes
You need to copy this from /django/contrib/admin/templates/admin/change_form.html
And then put that in your template folder that is specified in the
settings.TEMPLATE_DIR
"""
change_form_template = 'view_form.html'
# Remove the delete Admin Action for this Model
actions = None
def has_add_permission(self, request):
return False
def has_delete_permission(self, request, obj=None):
return False
def save_model(self, request, obj, form, change):
#Return nothing to make sure user can't update any data
pass
# Example usage:
class SomeAdmin(ViewAdmin):
# put your admin stuff here
# or use pass
In change_form.html replace this:
{{ adminform.form.non_field_errors }}
with this:
<table>
{% for field in adminform.form %}
<tr>
<td>{{ field.label_tag }}:</td><td>{{ field.value }}</td>
</tr>
{% endfor %}
</table>
Then remove the submit button by deleting this row:
{% submit_row %}
One workaround would be to have an additional "save" permission on your model and check in the modeladmin's save_model
method if the user has this permissions, if he has not, that would mean he can do everything in this modeladmin, except saving edited data!
You can use the django-admin-view-permission application:
pip install django-admin-view-permission
INSTALLED_APPS = [
'admin_view_permission',
'django.contrib.admin',
...
]
UPDATE:
Django 2.1 has a view permission out of the box.