gpt4 book ai didi

python - Django 内联模型管理 : Show partially an inline model and link to the complete model

转载 作者:行者123 更新时间:2023-11-28 19:25:10 29 4
gpt4 key购买 nike

我定义了几个模型:Journals、volumes、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”的内部类似:

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.

有什么想法吗?

谢谢,乔瓦尼

最佳答案

更新:从 Django 1.8 开始,这是内置的。

参见 this answerthe official documentation .

旧答案:

最后我找到了一个简单的解决方案。

我创建了一个名为 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()

然后当我定义一个新的内联时,我只需要使用我的 LinkedInline 而不是普通的 InlineModelAdmin

我希望它对其他人有用。

乔瓦尼

关于python - Django 内联模型管理 : Show partially an inline model and link to the complete model,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15158196/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com