Django 生成的 admin 页面,如何禁止某些 model 的添加/修改功能?

如题,有些 django-admin 默认是所有 model 都会加上添加、修改、删除之类的功能,有没有办法禁用某个 model 的部分功能?

阅读 12.4k
2 个回答
  • 重写你的 modeladmin 的 has_add_permission has_delete_permission 方法,可以定制 model 的修改删除行为。
  • 重写 get_readonly_fields 方法,可以针对某些字段设置为只读而不能修改。
  • 再重写 save_model可以修改 model 保存时候的一些行为。
  • 重写 change_view方法,可以修改 修改 model 时候的行为

总而言之,如果需要自定义 djangoadmin 又不想更改 django 源码,就只能重写 admin.ModelAdmin 这个 class 的一些方法接口。配合返回的 querysetpermission,大部分业务需求都能完成。具体自行 google 那些方法的用法。

一篇参考 Django admin的一些有用定制

更高级的更灵活的定制,就是自己撸一个后台出来。

@admin.register(Attachs)
class AttachsAdmin(admin.ModelAdmin):
    actions = None
    list_display  = ('file_md5', 'file_ext', 'file_size', 'content_type', 'name', 'origin', 'reference_num', 'client_ip', 'created_at', )
    search_fields = ('file_md5', 'file_ext', 'name', )

    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 False
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题