【问题标题】:changing options according to the user choice根据用户选择更改选项
【发布时间】:2010-10-30 14:34:34
【问题描述】:

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

【问题讨论】:

    标签: django django-admin django-views


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      不幸的是,没有简单的方法可以纯粹在服务器端执行此操作。但是,使用一些 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 管理员中无缝运行。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-07-12
        • 1970-01-01
        • 2022-11-23
        • 1970-01-01
        • 1970-01-01
        • 2021-07-07
        • 2019-05-18
        相关资源
        最近更新 更多