Readonly models in Django admin interface?

前端 未结 14 1529
北恋
北恋 2020-12-02 05:53

How can I make a model completely read-only in the admin interface? It\'s for a kind of log table, where I\'m using the admin features to search, sort, filter etc, but there

14条回答
  •  离开以前
    2020-12-02 06:18

    Compiling @darklow and @josir 's excellent answers, plus adding a bit more to remove "Save" and "Save and Continue" buttons leads to (in Python 3 syntax):

    class ReadOnlyAdmin(admin.ModelAdmin):
        """Provides a read-only view of a model in Django admin."""
        readonly_fields = []
    
        def change_view(self, request, object_id, extra_context=None):
            """ customize add/edit form to remove save / save and continue """
            extra_context = extra_context or {}
            extra_context['show_save_and_continue'] = False
            extra_context['show_save'] = False
            return super().change_view(request, object_id, extra_context=extra_context)
    
        def get_actions(self, request):
            actions = super().get_actions(request)
            if 'delete_selected' in actions:
                del actions['delete_selected']
            return actions
    
        def get_readonly_fields(self, request, obj=None):
            return list(self.readonly_fields) + \
               [field.name for field in obj._meta.fields] + \
               [field.name for field in obj._meta.many_to_many]
    
        def has_add_permission(self, request):
            return False
    
        def has_delete_permission(self, request, obj=None):
            return False
    

    and then you use like

    class MyModelAdmin(ReadOnlyAdmin):
        pass
    

    I've only tried this with Django 1.11 / Python 3.

提交回复
热议问题