django modeladmin 设置只读

在使用django的时候,ModelAdmin默认对于model的操作只有增加,修改和删除,但是总是有些字段是不希望用户来编辑的,使用下面的代码可以使ModelAdmin中让他显示为只读:

lang: python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
   class (admin.ModelAdmin):
"""ModelAdmin class that prevents modifications through the admin.

The changelist and the detail view work, but a 403 is returned
if one actually tries to edit an object.
"""

actions = None

def get_readonly_fields(self, request, obj=None):
return self.fields or [f.name for f in self.model._meta.fields]

def has_add_permission(self, request):
return False


def has_change_permission(self, request, obj=None):
if request.method not in ('GET', 'HEAD'):
return False
return super(ReadOnlyModelAdmin, self).has_change_permission(request, obj)

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

对于你要设置为只读的ModelAdmin,继承这个类:

lang: python
1
2
3
4
5
class TestAdmin(ReadOnlyModelAdmin):
list_display = ('','',)
list_filter = ('',)
search_fields = ('',)

然后在admin中注册即可:

lang: python
1
admin.site.register(Test,TestAdmin)

文章来源:WebLog编程网志