我可以在这个模型中使用Django的默认管理应用程序吗?

时间:2012-06-22 07:06:40

标签: django django-admin

我正在尝试使用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”中的第一个屏幕;然后会显示一个大陆列表;点击一个大陆将显示与该大陆相关的国家列表;最后,用户可以编辑国家/地区表单,显示一些内联区域表单,以允许在同一页面上添加国家和地区。

我希望这个具体例子让人们更容易理解......

2 个答案:

答案 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,以及BCA的内联编辑就像GenericForeignKey一样。然而,对于大多数用途而言,这很难并且过度使用......