Django InlineModelAdmin:部分显示内联模型并链接到完整模型

我定义了几种模型:日志,卷,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并添加了此代码以创建链接。

{% 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

#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。

以上是 Django InlineModelAdmin:部分显示内联模型并链接到完整模型 的全部内容, 来源链接: utcz.com/qa/414918.html

回到顶部