创建动态管理站点

Create a dynamic admin site

我想创建一个动态管理站点,它会根据字段是否为空来显示该字段。所以我有一个模型,它有一定数量的字段,但对于每个单独的条目,将不包含我模型中的所有字段,我想根据该字段是否为空来排除。

我有一个唯一的桥梁标识符,它与每座桥梁相关,然后是描述桥梁的所有各种不同变量。

我现在已经设置好了,用户将使用唯一的网桥密钥转到 url,然后这将创建该网桥的条目。所以(当我在我的本地机器上测试时)就像 localhost/home/brkey 和我的 views.py 中的代码对应于 url 是

然而,并不是每座桥都是一样的,我有更多的变量想包含在我的模型中,但现在我只测试两个:prestressed_concrete_deck 和 reinforced_concrete_coated_bars .我想要的是动态创建管理站点,以便在该字段为空时不显示 prestressed_concrete_deck 变量。因此,我不想在管理站点上显示所有变量,而是只想在该桥有该部分时显示这些变量,如果该字段为空白则不显示任何内容。

该问题的另一种可能解决方案是将该唯一标识符移交给我的 admins.py。我无法弄清楚如何获取那个单独的密钥,因为我可以在 admins.py 中查询。如果我知道如何访问 bridgekey,我可以在 admins.py 中动态查询。那么我将如何在我的 admins.py 中访问该条目的 brkey(类似于 BridgeModel.brkey ?)

我在我的 admin.py 中尝试了几种不同的方法,并尝试了在我的管理 class 中覆盖 get_fields() 方法的评论建议,但我可能在语法上是错误的我有点困惑它到底需要什么对象。那是实际输入吗?或者是个别字段?

只需覆盖 ModelAdmin class 中的 get_fields 方法即可。

您可以检查 obj 作为函数参数传递,以便检查哪些字段为空。该函数需要 return 一个元组,因此,您将根据 field1 的值检查 field1 is None 然后 return (field1, field2, field3)(field2, field3) .

我使用的是不支持覆盖 get_fields 方法的 Django 1.6。更新到 1.7,此方法非常有效。