在我的课堂上,我有 12个字段。一个字段是状态,另一个字段是原因。当我进入django管理员的编辑页面时,我只想显示第二个字段(原因字段),如果状态=='被拒绝'。问题很简单:只根据用户输入显示字段。
答案 0 :(得分:3)
遗憾的是,没有简单的方法可以完全实现服务器端。但是,使用一些JavaScript可以相对容易地完成 - 根据状态切换原因字段的可见性。以下是使用jQuery的示例:
$(document).ready(function() {
// Toggle visibility on page load
setReasonVisibility();
// Toggle visibility on status change
$('form #id_status').bind('change', setReasonVisibility)
function setReasonVisibility() {
var form = $('form');
var status = $(form).find('#id_status').val();
if (status == 'rejected')
$(form).find('#id_reason').show();
else
$(form).find('#id_reason').hide();
}
});
要让表单加载JavaScript文件,您需要在Media
类中将其引用到模型的表单中,不管怎么样:
class YourModelForm(forms.ModelForm):
class Meta:
model = YourModel
class Media:
js = ('path/to/jquery.js', 'path/to/your-js-file.js')
此解决方案应在Django管理员中无缝运行。
答案 1 :(得分:0)
我不清楚您是指“项目”的更改列表还是个别编辑页面。如果是后者,@GuðmundurH有一个很好的jQuery解决方案。如果是前者,您可以通过在模型上提供方法 reason_if_rejected 来执行此操作,如果状态为“已拒绝”则返回原因,否则返回空字符串。然后,您可以在 list_display 设置中包含此方法的名称。