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

时间:2014-03-02 13:13:50

标签: python django django-admin

我想知道的是如何更改应用于list_display_links课程的admin.ModelAdmin中列出的项目的网址?

更具体地说,我希望/admin/contacts/contacts/12345/成为/contacts/12345/

我能找到的所有解决方案都相当古老,有点复杂,并且倾向于在顶部做其他事情 - 所以我希望有一些明显的方法让我失踪。

(我有点期待list_display_link_url(或类似的)存在于ModelAdmin中的覆盖...

2 个答案:

答案 0 :(得分: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

    {{1}}

答案 1 :(得分:0)

如果遵循Alex Yakovlev的建议,您可能会回到ChangeList的原始实现,在旧版本的Django(肯定是1.2)中是:

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