如何在Django Admin变更列表页添加删除和编辑链接

0 投票
2 回答
2261 浏览
提问于 2025-04-17 18:22

我在使用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'

更新:

撰写回答