2014-03-02 113 views
8

我想知道的是,如何更改适用于admin.ModelAdmin类的list_display_links中列出项目的URL?我想/admin/contacts/contacts/12345/变成/contacts/12345/修改Django 1.6中“list_display_links”的URL管理员更改列表

我能找到的所有解决方案都相当陈旧,有点复杂,并且希望在顶部做其他事情 - 所以我希望有一些明显的方法,我错过了。

(我是种期待list_display_link_url(或类似)存在过度搭在ModelAdmin ...)

回答

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. Tell Django admin使用您的新ContactsChangeList而不是标准配置:

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

如果按照亚历克斯雅科夫列夫的建议,你可能会恢复到原来的执行变更表,其中在旧版本的Django的(1.2不确定)为:

def url_for_result(self, result): 
    return "%s/" % quote(getattr(result, self.pk_attname))