我定义了几种模型:日志,卷,volume_scanInfo等。
日记可以具有更多的卷,而一个卷可以具有更多的scanInfo。
我想做的是:
Journal #1 admin page [name] [publisher] [url] ..... list of volumes inline [volume 10] [..(other fields)..] <a href="/link/to/volume/10">Full record</a> [volume 20] [..(other fields)..] <a href="/link/to/volume/20">Full record</a>
然后
Volume #20 admin page [volume number] [..(other fields)...] ...... list of the scan info inline [scan info 33] [..(other fields)..] <a href="/link/to/scaninfo/33">Full record</a> [scan info 44] [..(other fields)..] <a href="/link/to/scaninfo/44">Full record</a>
我试图做的是定义一个模型方法来创建代码,并尝试在管理中定义“ volume inline”的类中使用它,但是它不起作用。
换一种说法
模型“ Volume”的内部类似:
def selflink(self): return '<a href="/admin/journaldb/volume/%s/">Full record</a>' % self.vid selflink.allow_tags = True
和
class VolumeInline(admin.TabularInline): fields = ['volumenumber', 'selflink'] model = Volume extra = 1
但这会产生以下错误:
Exception Value: 'VolumeInline.fields' refers to field 'selflink' that is missing from the form.
任何想法?
最后,我找到了一个简单的解决方案。
我创建了一个称为linked.html的副本的新模板,tabular.html并添加了此代码以创建链接。
linked.html
tabular.html
{% if inline_admin_form.original.pk %} <td class="{{ field.field.name }}"> <a href="/admin/{{ app_label }}/{{ inline_admin_formset.opts.admin_model_path }}/{{ inline_admin_form.original.pk }}/">Full record</a> </td> {% endif %}
然后我创建了一个LinkedInline继承新模型InlineModelAdmin
LinkedInline
InlineModelAdmin
#override of the InlineModelAdmin to support the link in the tabular inline class LinkedInline(admin.options.InlineModelAdmin): template = "admin/linked.html" admin_model_path = None def __init__(self, *args): super(LinkedInline, self).__init__(*args) if self.admin_model_path is None: self.admin_model_path = self.model.__name__.lower()
然后,当我定义一个新的内联时,我只需要使用my LinkedInline而不是normal即可InlineModelAdmin。