【问题标题】:Create a dynamic admin site创建动态管理站点
【发布时间】:2015-03-10 15:31:56
【问题描述】:

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

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

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

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

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

我在 admin.py 中尝试了几种不同的方法,并尝试了 cmets 建议在我的管理类中覆盖 get_fields() 方法,但我可能在语法上是错误的,我有点困惑它到底需要什么对象是。这是真正的入口吗?还是那是个别领域?

【问题讨论】:

    标签: python django django-models django-admin


    【解决方案1】:

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

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

    【讨论】:

    • 我试过了,但我可能在语法上不正确,(我尝试了上面的代码,它编译并运行,但如果它是空白的,则不会隐藏该字段)。你还有什么建议
    【解决方案2】:

    我使用的 Django 1.6 不支持覆盖 get_fields 方法。更新到 1.7,这种方法效果很好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-18
      • 2017-01-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多