python - 在 Django 1.6 管理更改列表中修改 "list_display_links"的 URL

标签 python django django-admin

我想知道的是如何更改应用于 admin.ModelAdmin 类的 list_display_links 中列出的项目的 URL?

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

我能找到的所有解决方案都很陈旧,有些令人费解,而且是为了在上面做一些其他事情——所以我希望我能找到一些明显的方法。

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

最佳答案

  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
    

关于python - 在 Django 1.6 管理更改列表中修改 "list_display_links"的 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22128020/

相关文章:

python - 在 Pandas 数据框中查找重复值的计数和排序

python - 在同一函数中的子进程调用之前运行 python 命令?

python - 如何在 Django 模板中使用模板?

python - Django 中 Pisa 的 pdf 生成未呈现 CSS

python - Django初始化后执行代码

python - 在Python中从双端队列的左侧弹出一组最多N个条目

django - "django-admin startapp"有什么魔力,测试运行器需要找到我的 tests.py

python - 变更表单中的ModelChoiceField初始值

Django 教程第 2 部分模板——未反射(reflect) base_site.html 更改

Django 管理网址