簡體   English   中英

如何更改CharField選擇列表行為

[英]How to Change CharField Choice List Behaviour

如下所示,我有CharField模型 用戶可以選擇ROLE_CHOICE中的一個值。

問題 :如何使某些值不可用,但您仍然可以在選擇中看到它們。

目前,我已經嘗試了以下代碼,但它使一些值不可見,這不是我想要的(我希望它們被禁用,而不是不可見)。

model.py

ROLE_CHOICES = (
        ('manager', 'Manager'),
        ('developer', 'Developer'),
        ('business_analyst', 'Business analyst'),
        ('system_analysts', 'System analysts'),
)


class Membership (models.Model):
    ***OTHER FIELDS***
    role = models.CharField(max_length=20, choices=ROLE_CHOICES,)

forms.py

class MembershipForm(forms.ModelForm):
    class Meta:
        model = Membership
        fields = '__all__'

    def __init__(self, *args, **kwargs):
        super(MembershipForm, self).__init__(*args, **kwargs)
        self.fields['role'].choices = tuple(choice for choice in ROLE_CHOICES if choice[0] not in ['developer'])

在此輸入圖像描述

編輯:將禁用更改為內部列表中的位置0! forms.py

class MembershipForm(forms.ModelForm):
    class Meta:
        model = Membership
        fields = '__all__'

    def __init__(self, *args, **kwargs):
        super(MembershipForm, self).__init__(*args, **kwargs)
        self.fields['role'].choices = tuple(choice if choice[0] not in ['developer'] else ({"label":choice[1],"disabled":True},choice[0]) for choice in ROLE_CHOICES )

這里,

tuple(choice if choice[0] not in ['developer'] else ({"label":choice[1],"disabled":True},choice[0]) for choice in ROLE_CHOICES )

會給

(('manager', 'Manager'), ( {'disabled': True, 'label': 'developer'}, Developer), ('business_analyst', 'Business analyst'), ('system_analysts', 'System analysts'))

也就是說,對於需要禁用的所有字段,您需要添加標簽和禁用屬性!

這應該做的伎倆!

希望能幫助到你!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM