我想要做的是在表单视图中(而不是在列表视图中)创建链接,如图所示,以便当前网址为http://localhost:8000/admin/myapp/map/3/时 该链接将指向http://localhost:8000/reports/3.pdf 并注意我不想将pdf存储在数据库中。
我能够使用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>');
});
答案 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>');
});