我正在尝试使用django构建的应用程序模型的一部分基于三层结构,如下所示:
class A(models.Model):
name = models.TextField()
class B(models.Model):
related_A = models.ForeignKey(A)
info = models.TextField()
class C(models.Model):
related_B = models.ForeignKey(B)
other_infos = models.TextField()
所以A由一些B组成,它们由一些C组成。由于Django管理员还不接受嵌套的内联表单,我认为这样做的理想方式是使用这种工作流程:会有一个“管理页面”,它会给我一个点击链接,称为“添加”一些B到这个A“,并使用内联C形式向我提供一个带有B形式的页面。
有没有办法只是从我没有看到的管理网站上做到这一点,还是应该考虑扩展管理员默认应用程序?
一些澄清
假设您对大陆,国家和地区进行了统计。我的目标是建立一个清晰的结构,将国家/地区添加到大陆,将地区添加到国家/地区。理想情况下,管理界面的用户将无法“立即”添加国家/地区;她或他需要经历一个他必须选择一个大陆的页面。理想情况下,欧洲大陆将有一个单页,包含一个国家的内联形式,每个形式都有一个内联形式的区域。
由于嵌套的内联表单似乎不是Django 1.3中的一个功能,我正在寻找一种在管理站点中拥有某种“工作流程”的方法:用户首先点击“Continent”中的第一个屏幕;然后会显示一个大陆列表;点击一个大陆将显示与该大陆相关的国家列表;最后,用户可以编辑国家/地区表单,显示一些内联区域表单,以允许在同一页面上添加国家和地区。
我希望这个具体例子让人们更容易理解......
答案 0 :(得分:0)
你可以使用GenericForeginKey()来解决限制问题。
参考https://docs.djangoproject.com/en/dev/ref/contrib/contenttypes/
答案 1 :(得分:0)
最简单的方法是使用Country
作为起点:在其表单页面中,您可以内联编辑Region
,并强制员工从现有的Continent
中进行选择或添加新内容一个点击+
。
您还可以修改ModelAdmin
以打开Country
页面,并将已保存pk
的{{1}}填充到其中,这更加困难。同时检查this post。
此外,可以模仿Continent
中的ForeignKey
指向A
中的C
,以及B
中C
和A
的内联编辑就像GenericForeignKey
一样。然而,对于大多数用途而言,这很难并且过度使用......