2017-03-12 4 views
3

Wie Sie unten sehen können, habe ich Modell mit CharField. Der Benutzer kann einen der Werte innerhalb ROLE_CHOICE wählen.So ändern Sie das CharField-Auswahllistenverhalten

Frage: Wie kann ich einige Werte nicht verfügbar machen, aber Sie können sie immer noch in der Auswahl sehen.

Zur Zeit habe ich den folgenden Code versucht, aber es macht einige Werte unsichtbar, was ist nicht was ich will (ich will sie deaktiviert, nicht unsichtbar).

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']) 

enter image description here

Antwort

1

Edit: geändert Behinderte 0 in innere Liste zu positionieren! Hier 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) 

geben

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

Das heißt, für alle Felder, die deaktiviert werden muss, müssen Sie das Etikett und deaktiviert Attribut hinzufügen !

und das sollte den Trick tun!

Hoffe es hilft!

+0

Hallo, Ich habe Ihren Code versucht, aber leider hat es nicht funktioniert. Es ist immer noch wählbar. Ich habe meinem Beitrag ein Bild hinzugefügt. Sie können sehen, wie es aussieht, überprüfen Sie es bitte. Hast du eine Idee? –

+0

Ich habe die Änderungen hinzugefügt! Lass es mich wissen, wenn du immer noch den Fehler hast! –

+0

Ich habe es getestet. Der noch wählbare Benutzer kann Entwickler auswählen, aber Formularvalidierung funktioniert. In der Tat ist es nicht das, was Sie brauchen. Wie denkst du, ich brauche vielleicht eine deaktivierte Auswahl in der Vorlage und nicht in der Form. Schauen Sie noch einmal nach. Ich bearbeite das Bild. –

Verwandte Themen