2011-01-13 74 views
8

根据其他字段的值,有条件地显示admin中的字段的最佳方式是什么?Django管理员:需要有条件地显示字段

特别是我正在考虑add_form和change_form。每当选择某个选项时,我想隐藏或禁用某些字段。

我在想,这可能需要JavaScript解决方案,但我想知道是否有更好的(即内置)方法来做到这一点。

+3

这个问题没有内置的解决方案,如果你希望字段动态显示,你将永远需要一个定制的javascript/ajax解决方案! – 2011-01-13 23:56:19

+0

谢谢,我认为是这样。我只是在做一些“错误的方式”而非常偏执。 – IntrepidDude 2011-01-14 15:34:50

回答

1

伯恩哈德是对的。您可能会破解管理员视图和模板以有条件地显示/不显示窗口小部件,但如果您想根据管理员中的用户行为动态地执行此操作,那么您将使用javascript。

虽然这并不太可怕。至少Django管理模板具有模型和实例特定的ID,可以让您精确控制显示/隐藏行为。

+0

我有这个相同的需求,我想知道我会把JavaScript代码放在哪里。即在哪个模板中? – 2014-01-21 14:54:33

0

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

使用窗体的_init __()方法来选择性地显示字段。

我会试一试并更新这个答案,如果它的工作。如果你想要一个即时响应 - 点击一个字段,另一个字段出现/消失,如果你需要一个即时响应 - 点击一个字段,另一个字段出现/消失,是的,你需要JavaScript)。

0

我的回答听起来很深奥 - 但我怀疑你可能采取的设计方向可能会受益于一些重新考虑。当一个界面需要那么多的TLC来求助于AJAX来创造出更好的UX时,我倾向于不使用Admin界面。

我个人对Django的Admin界面的看法是,它是一个很棒的免费赠品,可以让我在基本级别上获得即时的CRUD视图。对于那些需要更友好用户界面的用户(即使其中一些用户正在处理管理功能),我会避免为其提供支持。在尝试使用Admin界面进行这些类型的Ajax UI/UX和复杂表单验证时,您将获得技术债务。

相关问题