我可以为此模型使用 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 以及强制员工从现有的Continents 中进行选择或通过单击+ 添加新的.

您还可以修改ModelAdmin 以打开Country 页面并将已保存的Continent 填充到其中的pk,这更加困难。也检查this post。

此外,可以模仿ForeignKeyC 中指向A,并在A 中内联编辑BC,就像GenericForeignKey 一样。但是,对于大多数用途来说,这很难而且矫枉过正......

【讨论】:

以上是关于我可以为此模型使用 Django 的默认管理应用程序吗?的主要内容,如果未能解决你的问题,请参考以下文章

Django中的默认权限/组数据

django:管理站点中模型的自定义名称

如何为 Django 模型定义默认数据?

Django-基础 Meta自定义

django更改管理视图(无模型)

Django基于模型表路由到数据库