修改Django 1.6管理更改列表中的“list_display_links”URL

9 投票
2 回答
1355 浏览
提问于 2025-04-17 20:30

我想知道的是,如何更改在 admin.ModelAdmin 类的 list_display_links 中应用的链接地址?

具体来说,我希望 /admin/contacts/contacts/12345/ 变成 /contacts/12345/

我找到的所有解决方案都比较老旧,过程也有点复杂,而且都是为了实现其他功能,所以我希望能有更简单的方法我没想到。

(我本来以为会有类似 list_display_link_url 这样的东西可以在 ModelAdmin 中重写……)

2 个回答

0

如果你按照Alex Yakovlev的建议,可以回到ChangeList的原始实现。在旧版本的Django中(至少是1.2版本),它是这样的:

def url_for_result(self, result):
    return "%s/" % quote(getattr(result, self.pk_attname))
6
  1. 重写标准的 ChangeList(在你的 admin.py 文件里):

    from django.contrib.admin.views.main import ChangeList
    
    class ContactChangeList(ChangeList):  
        def url_for_result(self, result):  
            pk = getattr(result, self.pk_attname)  
            # YOU PROBABLY WANT TO CHANGE NEXT LINES!
            return reverse('admin:%s_%s_change' % (self.opts.app_label, self.opts.model_name),
                           args=(quote(pk),),  
                           current_app=self.model_admin.admin_site.name)
    
  2. 告诉 Django 管理后台使用你新创建的 ContactsChangeList,而不是默认的那个:

    class ContactAdmin(admin.ModelAdmin):  
        ...  
        def get_changelist(self, request, **kwargs):  
            return ContactChangeList
    

撰写回答