根据用户选择更改选项

时间:2009-06-02 06:46:48

标签: django django-admin django-views

在我的课堂上,我有 12个字段。一个字段是状态,另一个字段是原因。当我进入django管理员的编辑页面时,我只想显示第二个字段(原因字段),如果状态=='被拒绝'。问题很简单:只根据用户输入显示字段。

2 个答案:

答案 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 设置中包含此方法的名称。