2017-05-09 3 views
0

Ich habe ein Modell:Warum Django knusprige Form versteckte Felder erscheinen?

class MyModel(models.Model): 
    normal = models.CharField(null=True, blank=True, max_length=100) 
    other = models.CharField(null=True, blank=True, max_length=100) 
    hidden = models.CharField(null=True, blank=True, max_length=100) 

Wenn ich eine regelmäßige Form zu definieren, ohne exclude zu verwenden, zeigt das verborgene Feld auf der Benutzeroberfläche Nachdem die Taste in dem DOM einreichen (und UI):

class MyModelForm(forms.ModelForm): 
    class Meta: 
     model = MyModel 
     fields = ('normal', 'hidden') 

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

     self.helper = FormHelper(form=self) 
     self.helper.form_class = 'form-horizontal' 
     self.helper.label_class = 'col-sm-3 col-md-2' 
     self.helper.field_class = 'col-sm-9 col-md-10' 

     self.helper.layout = Layout(
      'normal', 
      Hidden('hidden', 'hidden initial'), 
      FormActions(
       Submit('save', 'Save', css_class='save-entry btn-success'), 
      ) 
     ) 

Nun, wenn ich Dinge umdrehen und eine grundsätzlich äquivalente Form zusammenstellen, aber exclude verwendend, erscheint das versteckte Feld nicht (was wir wollen).

Ich kann meinen Kopf nicht umschließen warum das passiert.

Antwort

2

Das Layout Hidden wird verwendet, um einen versteckten Eingang zu erstellen. Sie können jedes Element Hidden hinzufügen, auch wenn es in Ihrem Formular nicht deklariert ist. Wenn Sie in Ihrem Fall das Element inspizieren, können Sie sehen, dass es einen versteckten Eingang namens hidden gibt.

Was Sie statt mit dem Hidden Layout tun müssen, müssen Sie so etwas wie dies tun:

class MyModelForm(forms.ModelForm): 
    class Meta: 
     model = MyModel 
     fields = ('normal', 'hidden',) 

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

     self.helper = FormHelper(form=self) 
     self.helper.form_class = 'form-horizontal' 
     self.helper.label_class = 'col-sm-3 col-md-2' 
     self.helper.field_class = 'col-sm-9 col-md-10' 

     self.helper.layout = Layout(
      'normal', 
      Field('hidden', type='hidden'), 
      FormActions(
       Submit('save', 'Save', css_class='save-entry btn-success'), 
      ) 
     ) 
+2

Wenn Sie benötigen, um den Wert des Feldes nicht zu bekommen/ändern, dann wäre es besser, um es einfach aus dem Formular auszuschließen. –

Verwandte Themen