Django默认没有只读权限,只能自己实现。查看了大量的资料,总算搞定了。

  1. 修改admin.py

    from django.contrib.admin.util import flatten_fieldsets #引入类

    class GconfAdmin(admin.ModelAdmin):

        list_display=('mailserver','mailsender','mail_on_off','sms_on_off')

        #搜索字段

        search_fields=('mailserver','mailsender','mail_on_off','sms_on_off')

        def get_readonly_fields(self,request,obj=None):

            if not request.user.is_superuser and request.user.username=='readonly':

                return [f.name for f in self.model._meta.fields]

            return self.readonly_fields

    在Admin类中新增红色部分

  2. root用户登录django界面,新建readonly用户,并赋予change权限即可(用户必须有change权限)

 

  此方法有个缺点就是每个mymodelAdmin类都需要添加get_readonly_fields函数

   优化方法:

   在在项目app下创建custom_model_admin.py  

    from django.contrib import admin

    from django.contrib.admin.util import flatten_fieldsets

    

    class CustomModelAdmin(admin.ModelAdmin):

       

        def get_readonly_fields(self,request,obj=None):

            if not request.user.is_superuser and request.user.username=='readonly':

                return [f.name for f in self.model._meta.fields]

            return self.readonly_fields

     在admin.py 中引用这个类

      from myapp.custom_model_admin import CustomModelAdmin

      将admin.ModelAdmin替换成CustomModelAdmin 即可