如何在Django Admin变更列表页添加删除和编辑链接
我在使用Django的后台管理系统。
但是现在每一行前面都没有删除的链接。虽然有“删除选中项”的选项,但我想在每一行的模型前面都能看到删除和编辑的链接。
我该如何在Django后台管理中实现这个功能呢?
2 个回答
0
在Django的管理后台中,可以通过使用 list_editable
这个选项,让字段可以直接在列表中编辑:https://docs.djangoproject.com/en/1.4/ref/contrib/admin/#django.contrib.admin.ModelAdmin.list_editable
不过,系统没有自带的功能可以在每一行添加一个删除链接。这部分需要你自己来实现。你需要在模型中添加一个属性,然后把它放到 list_display
中,这样在修改列表里就能看到“删除”这个文字。同时,你还需要一些JavaScript代码来确认是否真的要删除。我建议不要直接在一个操作中就执行删除。
至于你想通过Ajax来执行删除操作,还是想把用户引导到删除页面,这就看你自己的选择了。希望这些信息能帮到你。
2
class MyAdmin(models.ModelAdmin):
list_display = ('other_field', 'delete_link', 'edit_link')
def delete_link(self, obj):
info = obj._meta.app_label, obj._meta.module_name
url = reverse('admin:%s_%s_delete' % info, args=(obj.id,))
return '<a href="%s">Delete</a>' % url
delete_link.allow_tags = True
delete_link.short_description = 'Delete'
def edit_link(self,obj):
return u'<a href="/admin/%s/%s/%s">Edit</a>' % (
obj._meta.app_label, obj._meta.module_name, obj.id)
edit_link.allow_tags = True
edit_link.short_description = "Edit"
def action_link(self, obj):
app_name = obj._meta.app_label
url_name = obj._meta.module_name
data_id = obj.id
return """
<ul>
<li><a href="/admin/{0}/{1}/{2}">Edit</a></li>
<li><a href="/admin/{0}/{1}/{2}/delete">Delete</a></li>
</ul>
""".format(
obj._meta.app_label,
obj._meta.module_name,
obj.id)
action_link.allow_tags = True
action_link.short_description = 'Actions'
更新: