【问题标题】:Global Variables in Django Admin SiteDjango 管理站点中的全局变量
【发布时间】:2015-05-24 08:55:39
【问题描述】:

这是我最初的问题,但没有得到回答,所以我想再次发布一些我尝试过的策略,并且更具体一点。

我想创建一个动态管理站点,基于该字段是否为空白将显示该字段。因此,我有一个具有一定数量字段的模型,但是对于每个单独的条目,将不包含模型中的所有字段,并且我想根据该字段是否为空白来排除。我的项目是关于桥梁的,所以实际上我有一个模型,其中包含每个桥梁部分(这大致相当于 100 个),但每个单独的桥梁(映射到每个唯一的 brkey)都不会全部 100桥梁零件。因此,我可以预先填充它拥有的所有字段,但是管理站点还有 100 个其他字段,我不想显示那些在我的管理站点上未用于该特定网桥的字段,但这些字段将几乎每座桥都不同。

就像我之前说的,我有一个唯一的网桥标识符(一个唯一的 15 位字符串),它与每个网桥相关,然后是描述网桥的所有各种不同的变量。

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

这是我必须走的最后一条路线吗?我对 JavaScript 很陌生,所以我不想走这条路,但如果必须的话,我会走。无论如何,Django是否使用语法不同的Javascript?如果是这样,我找不到任何关于将 Javascript 合并到我的管理站点的 Django 文档。

我用尽的最后一个选择是使用全局变量。我没有在我的 Views.py 中创建条目的 url,而是将它放在我的 admins.py 中,并且我的 modelAdmin 类也放在那里,就像这样。

admins.py

-设置全局变量

bridgekey_unique = " "

如果我能找到一种方法将唯一的桥键传递给我的 modelAdmin 类,或者确定该字段是否为空白,因为桥没有该部分,我将能够在不使用 Javascript 的情况下实现我想要的.我已经尝试了这两种策略的很多变体,但都无济于事,但没有尝试过 JavaScript 的想法,因为我根本不知道任何 JavaScript。

抱歉,这篇文章太长了,但人们说我不够具体。任何帮助将不胜感激。

【问题讨论】:

    标签: python django dynamic django-admin


    【解决方案1】:

    我没有读完所有这些 - 抱歉,内容太多了。但我确实注意到您希望在您的模型管理定义中访问您在视图中设置的变量的评论。那是不可能的。

    在首次导入包含该类的模块时,始终执行类级别的任何操作。那是服务器进程启动的时候,所以在视图中完成的任何事情都不可能发生。

    你几乎从不想在类级别有任何逻辑。您需要将其放入在相关时间调用的方法中。在这种情况下,您可能需要使用get_fields 方法。

    编辑

    进一步查看您对 get_fields 方法的尝试,我完全看不出您在这里尝试做什么。 'prestressed_concrete_deck' 是一个文字字符串,永远不可能是 None,所以你的条件都不可能是真的。至于你关于参数是什么的问题,documentation for that method 清楚地解释了obj 是正在编辑的对象。

    【讨论】:

    • 那么对象就是我刚刚创建的条目?我查看了文档,它只有 1 行没有示例。所以我试过这个 if (obj.prestressed_concrete_deck is None): return ('brkey', 'bridge_orientation', 'skew', 'deckwidth', 'roadwidth', 'length', 'strengthening_concrete_coated_bars') else: return ('brkey' , 'bridgemed', 'mainspans', 'prestressed_concrete_deck', 'strengthening_concrete_coated_bars')
    • 没有显示空白,但我的假设是否正确,obj.我的模型中的任何字段都可以正确检查是否没有?我也有点困惑 get_fields 方法是什么,因为我的 else 语句没有做任何事情
    • 您确定该字段实际上是 None,而不是说 0?你最好只做if not obj.prestressed_concrete_deck:
    • 嘿抱歉,这是我以前尝试过的版本之一,因为 obj.prestressed_concrete_deck 不起作用。我意识到我使用的 Django 1.6 不允许覆盖 get_fields 但 1.7 允许。所以 obj.presetressted_concrete_deck 是 None 工作。这个问题我发了好几次都忘了说我都回答了​​,谢谢你的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-16
    • 2020-08-24
    • 2012-09-30
    • 1970-01-01
    • 2012-01-15
    • 2011-09-23
    相关资源
    最近更新 更多