【发布时间】:2011-04-22 07:59:15
【问题描述】:
我仍然坚持使用同一页面上相关模型的内联树状编辑。 我有三个模型,A、B 和 C。
Class A
Class B
fb = foreignkey(A)
Class C
fc = foreignkey(B)
在 admin.py 我正在做类似的事情
AdminA
inlines = [inlineB]
AdminB
inlines = [inlineC]
我希望当我编辑/添加模型 A 时,我应该能够内联添加模型 B,并添加模型 B 的相关模型 C 条目。我正在尝试内联表单集,但不知道如何将它们用于我的目的。此外,我找到了this old discussion on same problem。但同样,由于我是 Django 新手,我不知道如何让它工作。
【问题讨论】:
-
到目前为止,您实际尝试了什么?您在 12 小时前提出了一个相关问题,您说模型 B 仅定义了 A 和 C 之间的关系。我曾经与来自 django-tagging 的模型有类似的设置,它基本上使用
TaggedItem的GenericInlineAdminForm工作,它还主要定义标签、标记对象和内容类型之间的关系。但是,如果您只陈述相当抽象的问题,您就不能期望在这里得到有用的答案。 -
12 小时前,是的,B 是一个抽象类。但不再是,我对课程进行了一些更改。早些时候我希望找到一些内置的解决方案,比如如果你想创建一个foreginkey对象就会出现的弹出窗口。现在我正在尝试创建一种 inlineformset 类型的结构。所以在内联行中,我希望除了 B 的字段之外,我还能够添加实例类 C 对象。因此,寻找使用模型表单、内联表单集等的定制表单集解决方案。事实上,我的问题与我提到的链接中的问题完全相同。你能告诉我它的解决方案的细节吗?
-
请看docs.djangoproject.com/en/1.2/ref/contrib/admin/…。如果您为模型 B 定义 InlineAdminForm,例如从 admin.TabularInline 派生,您应该获得一个提供 + 按钮的表单显示,该按钮应该使您能够在弹出窗口中创建 C 的实例。如果这不起作用,请检查您的外键。您链接到的问题基本上对您的问题有合理的答案。
-
Bernd,感谢您的回复。但我想你误解了这个问题。我需要从 A 的添加/编辑页面编辑/添加 C 实例。显然,正如您提到的,将 C 作为模型 B 的内联编辑/添加与“+”一起使用。但这是一个树问题,在 A 的页面中编辑 C。我以抽象的方式编写问题以抓住问题的要点,即添加 A 的新实例并同时添加 B( 及其 C 对象)。最初的问题,有一个很好的解决方案,但很多部分是不完整的,特别是因为它使用了较旧的 django。一旦我弄清楚了,我会发布一个完整的解决方案。
-
不完全。我的意思是在 A 的页面内以表格形式内联显示 B,并可以从 B 的内联显示中添加 C 的实例。在我的例子中,B 是文章 A 的标签列表,带有用于从现有标签中选择标签的选择框和用于创建和分配新标签 (C) 的加号按钮。但是,在 A 的页面中 C 的内联显示 - 绕过 B 的任何显示 - 可能更难以实现。
标签: django django-admin inline-formset