我希望只能从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
但是,在这种情况下,我找不到删除对象的链接。 如何解决这个问题?
答案 0 :(得分:2)
禁用更改列表视图是有道理的。我注意到访问/admin/app/model/1/delete/
会让您删除该对象。
所以你基本上有两个选择:
/admin/app/model/pk/delete/
的删除按钮。
以某种方式将此连接到您的管理员。 has_change_permission
到True
并确保详细信息页面显示所有自定义表单
带有readonly小部件的字段。我会选择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