2016-07-24 13 views
0

dieses Modell Form annehmen:django - Wie man Formularfelder basierend auf Formulardaten selbst entfernt?

class MyModel(models.Model): 
    sex = models.CharField(max_length=1, default='M') 
    field1 = models.CharField(max_length=20) 
    field2 = models.CharField(max_length=20 

)

class MyForm(ModelForm): 
    class Meta: 
     model = MyModel 
     fields = ('sex', 'field1', 'field2') 

Der Fall ist einfach - wenn 'Geschlecht' männlich ist, field1 erforderlich sein sollte und field2 leer sein sollte. Wenn 'sex' weiblich ist, sollte field2 ausgefüllt werden und field1 sollte leer sein. In jedem Fall, wenn das andere Feld nicht festgelegt ist, möchte ich es selbst auf dem Server einstellen. Mittelwerte - field1 und field2 werden vom Modell benötigt. Ich möchte nur, dass nur einer in der Form editierbar ist. Ich zeige sie bedingt im Formular selbst mit Javascript, wie kann ich das im Server erzwingen?

habe ich versucht,

self.fields.pop('field1') 

in Form mit .clean() aber es funktioniert nicht, wie es noch in der Feldebene erforderlich ist

Antwort

0

In the__init__ Methode:

def __init__(self, *args, **kwargs): 
     if self.is_bound: 
      sex = self.data.get('sex', None) 
      if sex == 'M': 
       self.fields['field1'].required = False 
+0

Ich habe Ihre Lösung hinzufügen verwendet nur das Attribut .disabled für das Feld und legt den Feldwert selbst fest. Der Trick war tatsächlich is_bound in der Form __init__ zu verwenden – user3599803

Verwandte Themen