2016-12-01 10 views
2

Ich bin neu zu django und versuchen, etwas mit einem issue.I zu tun haben, dieses Modell:Django machen Feld auf einem anderen Feld Wert inaktiv, je

class MyModel(models.Model): 
    value = models.CharField(max_length=50, choises=...) 
    custom_value = models.CharField(max_length=50, blank=True) 

Und ich brauche custom_value Feld aktiviert werden nur bearbeiten wenn Wert des Wertfeldes "CUSTOM" ist.

Antwort

0

Ich gehe davon aus, wenn Sie sagen "zum Bearbeiten aktiviert" Sie beziehen sich auf ein Formularfeld. Ich gehe auch davon aus, dass die Daten beim Laden des Formulars bereits im Modell gespeichert werden.

In diesem Fall sollte dies auf dem entsprechenden Formular für dieses Modell erfolgen. Sie müssen das zu deaktivierende Formularfeld initialisieren und es dann beim Laden des Formulars aktivieren.

class MyForm(forms.ModelForm): 
    class Meta: 
     model = MyModel 

    def __init__(self, *args, **kwargs): 
     super().__init__(*args, **kwargs) 

     custom_value = self.fields.get('custom_value') 
     if custom_value and custom_value.widget.attrs['value'] == 'CUSTOM': 
      self.fields['value'].widget.attrs['disabled'] = 'false' 

Ich weiß, dass Ihr Code ist nur ein Beispiel, aber unter Verwendung von value als Klassenattributnamen verwirrend ist.

Wenn Sie dies dynamisch in einem Formular ausführen möchten, indem Sie beispielsweise eine Auswahl auswählen und dann eine andere Option ohne Browseraktualisierung aktivieren, muss dies in Javascript erfolgen. So würden Sie es mit nur Django-Formen machen.

Verwandte Themen