You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django Forms:如何在forms.py中为下拉选项设置类与禁用状态

在Django表单中为下拉选项添加自定义类与disabled属性

Django默认的forms.Select组件无法直接为单个<option>元素设置自定义类或disabled属性,需要通过自定义Widget来实现。以下是具体方案:

方法:自定义Select Widget

重写Select类的create_option方法,在生成每个选项时添加目标属性:

1. 定义自定义Widget

from django.forms import Select

class CustomSelect(Select):
    def create_option(self, name, value, label, selected, index, subindex=None, attrs=None):
        # 调用父类方法生成基础选项结构
        option = super().create_option(name, value, label, selected, index, subindex, attrs)
        
        # 为指定选项添加自定义属性
        if value == 'Option 1':
            option['attrs']['class'] = 'some-class'
            option['attrs']['disabled'] = True
        
        return option

2. 在表单中使用自定义Widget

修改你的ExampleForm,替换默认的Select为自定义的CustomSelect:

from django import forms
from .models import YourModel  # 替换为你的实际模型类

class ExampleForm(forms.ModelForm):
    CHOICES = (('Option 1', 'Option 1'),
               ('Option 2', 'Option 2'),)
    
    classification = forms.ChoiceField(
        choices=CHOICES,
        widget=CustomSelect(attrs={'class':'form-select'})
    )
    
    class Meta:
        model = YourModel
        fields = ['classification']

效果说明

上述代码运行后,生成的HTML会符合你的预期:

<select class="form-select" name="classification" id="id_classification">
  <option class="some-class" value="Option 1" disabled>Option 1</option>
  <option value="Option 2">Option 2</option>
</select>

你可以根据需求修改create_option方法中的判断逻辑(比如根据label或其他条件),为不同选项添加不同的属性。

内容的提问来源于stack exchange,提问作者stats con chris

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 16:06:41