根据另一个字段中的选择显示/隐藏 django 管理表单字段

Posted

技术标签:

【中文标题】根据另一个字段中的选择显示/隐藏 django 管理表单字段【英文标题】:show/hide django admin form field based on selection in another field 【发布时间】:2019-12-01 01:46:16 【问题描述】:

我正在尝试隐藏 Django 管理表单字段,直到我从下拉列表中选择特定值

我已经尝试了包括 Jquery 在内的所有内容,Jquery 文件加载正确,因此我的静态根目录指向正确的文件,但是当管理站点加载并且我更改下拉列表中的值时,没有任何反应。

我正在使用最新的 Django 和 python 3.7,我也在使用 Django-jet 作为自定义管理模板

models.py


class Incident(models.Model):
    Incident_Type =models.ForeignKey(IncidentType,on_delete=models.DO_NOTHING, 
    null=True, blank=False)
DEM_REASON_CHOICES = (("Payments", "Payments"), ("Policies", "Policies"), ("Legal Issues", "Legal Issues"), ("Deactivation", "Deactivation"))
    demonstration_reason = models.CharField(max_length=200, choices=DEM_REASON_CHOICES, null=True, blank=True)

admin.py

@admin.register(IncidentType)
class IncidentTypeAdmin(admin.ModelAdmin):

@admin.register(Incident)
class IncidentAdmin(admin.ModelAdmin):
    form = IncidentAdminForm

forms.py

from django import forms
from .models import Incident

class IncidentAdminForm(forms.ModelForm):
    class Meta:
        model = Incident
        widgets = 
            'demonstration_reason': forms.SelectMultiple,
        
        fields = "__all__"
    class Media:
        js = ('jet/showhide.js',)

我的 Jquery 脚本

(function($) 
    $(function() 
        var selectField = $('#id_Incident_Type'),
            verified = $('#id_demonstration_reason');

        function toggleVerified(value) 
            if (value === 'Demonstration') 
                verified.show();
             else 
                verified.hide();
            
        

        // show/hide on load based on pervious value of selectField
        toggleVerified(selectField.val());

        // show/hide on change
        selectField.change(function() 
            toggleVerified($(this).val());
        );
    );
)(django.jQuery);

我正在像这样在我的 base.html 中加载脚本

% block scripts %
<script src="% static 'jet/showhide.js' %"></script>
% endblock %

当我运行服务器时,js 脚本会加载以下消息 “GET /static/jet/showhide.js HTTP/1.1”304 0

我希望隐藏 demo_reason 字段 ('#id_demonstration_reason'),直到我从 Incident_Type 字段 ('#id_Incident_Type') 中选择 demostaration

但是使用当前代码,当我转到管理页面并单击模型时,demoment_reason 字段没有隐藏,并且当我更改 Incident_Type 的值时没有任何反应

【问题讨论】:

【参考方案1】:

我建议选择 2。该库还有很多其他功能,但链接字段是您想要做的。

https://django-select2.readthedocs.io/en/latest/extra.html#chained-select2

【讨论】:

以上是关于根据另一个字段中的选择显示/隐藏 django 管理表单字段的主要内容,如果未能解决你的问题,请参考以下文章

如何根据 django admin 中的另一个选择字段限制选择字段选项

Django admin 根据另一个字段值过滤一个外部字段

RoR:加载编辑页面时根据用户选择显示/隐藏字段?

在 django 中单击管理员的选择字段后如何隐藏或显示模型字段

如果在下拉列表中选择了特定值,则 Django 管理员显示/隐藏字段

Django Admin显示/隐藏字段如果在下拉菜单中选择了特定值