我可以为此模型使用 Django 的默认管理应用程序吗?
Posted
技术标签:
【中文标题】我可以为此模型使用 Django 的默认管理应用程序吗?【英文标题】:Can I use the Django's default admin app for this model? 【发布时间】:2012-06-24 11:33:03 【问题描述】:我尝试使用 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 组成,而 B 又由一些 C 组成。由于 Django admin 还不接受嵌套的内联表单,所以我认为理想的方法是使用这种工作流程:会有一个“管理页面”,它会给我一个点击链接,名为“添加这个 A" 的一些 Bs,并使用内联 C 表单为我提供一个带有 B 表单的页面。
有没有一种方法可以简单地从我没有看到的管理员网站执行此操作,或者我应该考虑扩展管理员默认应用程序?
一些说明
假设您对大陆、国家和地区进行统计。我的目标是有一个清晰的结构,将一个国家添加到一个大陆,将一个地区添加到一个国家。理想情况下,管理界面的用户不能“立即”添加 Country ;她或他需要浏览一个必须选择大陆的页面。理想情况下,大陆只有一个页面,包含一个内联形式的国家,每个表格都有一个内联形式的地区。
由于嵌套的内联表单似乎不是 Django 1.3 中的一个功能,我正在寻找一种在管理站点中具有某种“工作流程”的方法:用户首先会单击“大陆”屏幕 ;然后它会显示一个大陆列表;点击一个大陆将显示与该大陆相关的国家列表;最后,用户可以编辑 Country 表单,显示一些内联区域表单以允许在同一页面上添加国家和地区。
我希望这个具体的例子更容易理解......
【问题讨论】:
你到底想要什么?您的要求不明确。 【参考方案1】:你可以使用GenericForeginKey()来解决限制问题。
参考https://docs.djangoproject.com/en/dev/ref/contrib/contenttypes/
【讨论】:
【参考方案2】:最简单的方法是使用Country
作为起点:在其表单页面中,您可以内联编辑Region
以及强制员工从现有的Continent
s 中进行选择或通过单击+
添加新的.
您还可以修改ModelAdmin
以打开Country
页面并将已保存的Continent
填充到其中的pk
,这更加困难。也检查this post。
此外,可以模仿ForeignKey
在C
中指向A
,并在A
中内联编辑B
和C
,就像GenericForeignKey
一样。但是,对于大多数用途来说,这很难而且矫枉过正......
【讨论】:
以上是关于我可以为此模型使用 Django 的默认管理应用程序吗?的主要内容,如果未能解决你的问题,请参考以下文章