Django admin:阻止添加,更改,但不删除

时间:2015-01-24 11:22:02

标签: django django-admin

我希望只能从admin中删除值。 我为此写了以下代码:

def has_add_permission(self, request):
    return False

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

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

但是,在这种情况下,我找不到删除对象的链接。 如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

禁用更改列表视图是有道理的。我注意到访问/admin/app/model/1/delete/会让您删除该对象。

所以你基本上有两个选择:

  1. 创建列出模型对象的自定义管理页面。每个对象 使用链接到/admin/app/model/pk/delete/的删除按钮。 以某种方式将此连接到您的管理员。
  2. 设置has_change_permissionTrue并确保详细信息页面显示所有自定义表单 带有readonly小部件的字段。
  3. 我会选择2.因为它不那么有用,所以为您提供更改列表页面(过滤器,操作)的所有好处,并保留默认的管理结构。一个很大的好处是用户可以看到他要删除的内容。

    我会做这样的事情(未经测试):

    class ItemForm(forms.ModelForm):
        def __init__(self, *args, **kwargs):
            super(ItemForm, self).__init__(*args, **kwargs)
            for field in self.fields: 
                self.fields[field].widget.attrs['readonly'] = True
    
        class Meta:
            model = Item
            exclude = []
    
    class ItemAdmin(admin.ModelAdmin):
        form = ItemForm
    
        def has_add_permission(self, request):
            return False
    
        def has_change_permission(self, request, obj=None):
            return True
    
        def has_delete_permission(self, request, obj=None):
            return True