Django管理界面:需要有条件地显示字段

10

最好的方式是根据其他字段的值有条件地在管理界面中显示一个字段。

特别是考虑到添加表单和更改表单。每当选择某个选项时,我想隐藏或禁用某些字段。

我认为这可能需要一个 JavaScript 解决方案,但我想知道是否有更好的(即内置的)方法来实现此目的。


3
如果你想让字段动态显示,那么这个问题没有内置的解决方案,你总是需要一个定制的JavaScript/Ajax解决方案! - Bernhard Vallant
谢谢,我也是这样认为的。我只是有点担心做事情不正确。 - IntrepidDude
3个回答

2

伯恩哈德是对的。您可能能够黑掉管理视图和模板,以有条件地显示/不显示字段小部件,但如果您想在管理工具中根据用户行为动态执行此操作,则将使用JavaScript。

尽管如此,这并不可怕。至少Django管理模板具有特定于模型和实例的ID,使您可以对显示/隐藏行为进行细粒度控制。


我也有同样的需求,不知道应该把实现这个功能的 JavaScript 代码放在哪里。比如说,应该放在哪个模板中? - Larry Martell

1
我的回答可能听起来有点晦涩,但我怀疑您可能正在采取的设计方向可以从重新考虑中受益。当一个界面需要那么多的TLC才能使用AJAX来实现更好的UX时,我倾向于不使用Admin界面。
我个人对Django的Admin界面的看法是,它是一个很棒的免费工具,可以让我立即获得基本级别的CRUD视图。如果有些用户需要更友好的界面(即使其中一些用户正在处理管理功能),我会避免在其上进行开发。您将在尝试使用Admin界面进行这些类型的Ajax UI/UX和复杂表单验证时产生技术债务。

实际上,Bernhard Vallant 以更简洁的方式表达了我的确切想法。我会点赞他的。 - Bobby Chowdhury
有哪些用于构建 Django admin-panel 的替代方案,该面板将用于管理 Android 应用程序的 REST 后端? - kiliman13

0

我认为你应该能够创建自己的ModelForm并指定管理员使用它(https://docs.djangoproject.com/en/1.7/ref/contrib/admin/#django.contrib.admin.ModelAdmin.form)。

使用表单的_init__()方法有选择地显示字段。

如果这个想法可行,我会尝试并更新这个答案。

(实际上重新阅读问题,这取决于情况。如果“其他字段的值”在页面加载之前设置,这个想法应该可以。如果你想要即时响应——点击一个字段,另一个出现/消失,那么你需要JavaScript)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接