0

在我的课堂上,我有大约12 个字段。一个是地位,另一个是理由。当我进入 django admin 中的编辑页面时,如果 status=='rejected',我只想显示第二个字段(原因字段)。问题很简单:只根据用户输入显示字段。

4

2 回答 2

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 管理员中无缝运行。

于 2009-06-02T07:56:28.457 回答
0

我不清楚您是指更改列表还是项目的单个编辑页面。如果是后者,@Guðmundur H 有一个很好的 jQuery 解决方案。如果是前者,您可以通过在模型上提供一个方法reason_if_rejected来实现,如果状态为“拒绝”则返回原因,否则返回空字符串。然后,您可以在list_display设置中包含此方法的名称。

于 2009-06-02T15:23:43.123 回答