如何在Django管理后台中添加新条目?
我正在做一个Django项目,创建了一些自定义的管理界面,使用了文档中提到的get_urls重写方法。这个方法运行得很好。不过,有一个问题,就是如果你不知道这个自定义管理界面的URL,就无法访问它。
我知道有一些方法可以在管理界面的某个地方添加链接到这个视图,但都不太满意。我希望在模型列表中,和所有模型管理界面一起显示这个自定义视图的链接。我只是不想在它旁边显示+添加或+更改的链接,因为它并不是一个模型。
我可以重写admin_site或者模板,但这样不好。因为这会把自定义放在项目层面,而不是应用层面。而且这样只会在/admin/页面上放链接,而不会在/admin/myapp/页面上放。
我也可以通过重写app_index.html模板在其他地方简单地添加链接,但那并不是一个方便或直观的地方来寻找它。
我想到的另一个解决方案是创建一个空模型,并为它注册一个空的管理界面。然后窃取那个模型的URL模式,这样点击它的条目就会转到我的自定义视图,而不是一个空的添加/更改视图。这样可以实现,但这真的是一个非常丑陋的解决办法。
这是我想要实现的效果的图片。
3 个回答
你试过这个应用吗:https://github.com/jsocol/django-adminplus? 即使它不能完全满足你想要的功能,看看里面的代码也能给你一些启发。
你需要去修改一下模板文件 admin/index.html。然后在第40行的 {% endfor %} 后面加上一对新的标签。
你也可以试试用 jQuery 来解决这个问题。
我觉得正确的做法是修改一些Django后台管理界面的模板。其实没有简单的方法可以直接添加这些链接。
https://docs.djangoproject.com/en/dev/ref/contrib/admin/#overriding-vs-replacing-an-admin-template
我还找到了一篇文章 http://coffeeonthekeyboard.com/o-hai-django-adminplus-568/,里面也提到django-adminplus是个不错的工具来实现这个功能。个人来说,我更喜欢不增加额外的依赖,还是用模板比较好,不过这就看你自己的选择了。