django - 如何添加管理表单视图的链接

时间:2015-07-15 05:09:57

标签: django admin

我想要做的是在表单视图中(而不是在列表视图中)创建链接,如图所示,以便当前网址为http://localhost:8000/admin/myapp/map/3/时 该链接将指向http://localhost:8000/reports/3.pdf 并注意我不想将pdf存储在数据库中。 enter image description here

我能够使用django-suit中的小部件来做到这一点。 这是我的代码 - 它可能会帮助其他人:

from django.forms import ModelForm
from suit.widgets import EnclosedInput

class MapForm(ModelForm):
    class Meta:
        widgets = {
            'info': EnclosedInput(append='<input type="button" class="btn" onclick="window.open(window.location.href.substring(0,window.location.href.indexOf(\'/admin\')) + \'/reports/\' + window.location.href.split(\'/\')[6] + \'.pdf\' );" value="view pdf"/>View pdf'),
        }

@admin.register(Person)
class PersonAdmin(admin.ModelAdmin):
    list_display = ('fname', 'lname', 'age')


@admin.register(Map)
class MapAdmin(admin.ModelAdmin):
    list_display = ('person', 'info')
    form = MapForm

有更好的方法吗? 我尝试使用django的字段集,但我无法弄清楚如何以更好的方式做到这一点。

请注意,该链接与信息字段并不真正相关,但我不知道如何制作单独的链接或按钮。也许django-suit的HTML5Input小部件可能更合适,但文档是如此神秘,我不知道它是做什么的。

更新:我还意识到如果你将链接按钮附加到选择列表,django-suit会将列表转换为文本输入,这会搞砸。

更新: 以下javascript工作。它在dom准备好后更改页面:

$(document).ready(function() {
   var url = window.location.href.substring(0, window.location.href.indexOf("/admin")) + "/reports/" + window.location.href.split("/")[6] + ".pdf";

   $("#content-main").append('<a href=' + url + '>View Report</a>');
});

1 个答案:

答案 0 :(得分:0)

只是为了分享整个解决方案:

@admin.register(Person)
class PersonAdmin(admin.ModelAdmin):
    list_display = ('fname', 'lname', 'age')


@admin.register(Map)
class MapAdmin(admin.ModelAdmin):
    list_display = ('person', 'info')
    class Media:
        js = ('report_loader.js',)

// report_loader.js
$(document).ready(function() {
   var url = window.location.href.substring(0, window.location.href.indexOf("/admin")) + "/reports/" + window.location.href.split("/")[6] + ".pdf";

   $("#content-main").append('<a href=' + url + '>View Report</a>');
});