Readonly models in Django admin interface?

前端 未结 14 1563
北恋
北恋 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:14

    Here are two classes I am using to make a model and/or it's inlines read only.

    For model admin:

    from django.contrib import admin
    
    class ReadOnlyAdmin(admin.ModelAdmin):
        readonly_fields = []
    
        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
    
    class MyModelAdmin(ReadOnlyAdmin):
        pass
    

    For inlines:

    class ReadOnlyTabularInline(admin.TabularInline):
        extra = 0
        can_delete = False
        editable_fields = []
        readonly_fields = []
        exclude = []
    
        def get_readonly_fields(self, request, obj=None):
            return list(self.readonly_fields) + \
                   [field.name for field in self.model._meta.fields
                    if field.name not in self.editable_fields and
                       field.name not in self.exclude]
    
        def has_add_permission(self, request):
            return False
    
    
    class MyInline(ReadOnlyTabularInline):
        pass
    

提交回复
热议问题