2017-05-05 5 views
0

Ich habe folgendes Modell:in einer Django Form, die Modelform verwendet

class PledgeSettings(models.Model): 

    message = models.CharField(max_length=200, blank=True, null=True) 

    amount = MoneyField(
     max_digits=6, 
     decimal_places=2, 
     default_currency='CAD', 
     blank=True, 
     null=True, 
    ) 

und ich habe das folgende Formular, die dieses Modell verwendet:

class PledgeSettingsForm(forms.ModelForm): 

    class Meta: 
     model = PledgeSettings 

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

     self.fields['message'].widget.attrs = { 
      'placeholder': _('Everytime I eat a doughnut'), 
     } 
     self.fields['message'].label = False 

     self.fields['amount'].label = _('I pledge to donate $') 

     self.helper = FormHelper() 
     self.helper.form_class = 'form-horizontal' 
     self.helper.label_class = 'col-xs-9' 
     self.helper.field_class = 'col-xs-3' 

     self.helper.layout = Layout(
      'message', 
      'amount' 
     ) 

     self.helper.layout.append(
      Submit('save', 'Save', css_class='save_button') 
     ) 

Das Problem ist, dass self.helper.label_class = 'col-xs-9'self.helper.field_class = 'col-xs-3' und keine Wirkung hat, und ich möchte die CSS-Klasse eines bestimmten Elements einzustellen, zB message oder amount und

Die HTML Ich erhalte ist:

<form class="form-horizontal" method="post"> <input type="hidden" ...> 
    <div id="div_id_message" class="control-group"> 
     <div class="controls"> 
      <input type="text" name="message" value="I smoke a cigarette" placeholder="Some text" class="textinput textInput" id="id_message"> 
     </div> 
    </div> 
    <div id="div_id_amount" class="control-group"> 
     <label for="id_amount_0" class="control-label "> 
      Some text 
     </label> 
     <div class="controls"> 
      <input type="number" name="amount_0" value="1.00" step="0.01" class="col-xs-3" id="id_amount_0"> 

      <select name="amount_1" class="col-xs-3" id="id_amount_1"> 
      <option value="CAD" selected="">Canadian Dollar</option> 
     </div> 
    </div> 
</form> 

Was ich will ist die Klassen für das Label Element und das Eingangselement für jedes Element besonders ändern. Ich habe keine Ahnung, wie das zu tun. Kann mir jemand helfen, dieses Problem zu lösen?

+0

Haben Sie Javascript in Betracht gezogen? Oder kommt das nicht in Frage? –

+0

@almostabeginner, ja, ich habe über JS gedacht, aber ich würde gerne wissen, ob Sie es direkt in der django Form tun können, oder mit dem 'self.helper' Instanzvariable. – lmiguelvargasf

Antwort

0

Ich habe nicht viel Erfahrung mit knusprigen Formen, so kann dies falsch sein, aber versuchen Sie Folgendes:

Für die erste Ausgabe versuchen self.helper = FormHelper(self) statt self.helper = FormHelper()

die CSS-Klasse von einzustellen ein bestimmtes Element, würden Sie ein Layout wie erstellen müssen:

self.helper.layout = Layout(
    Field('password', id="password-field", css_class="passwordfields",   
      title="Explanation") 
) 

Read more here

+0

das Problem ist, dass ich die Klasse von 'self.fields ändern möchten [‚message‘]', kein neues Element erstellen. Die Elemente, die ich verwenden möchte, sind in meinem Modell. – lmiguelvargasf

+0

Funktioniert das? 'Self.fields [‚message‘] widget.attrs = { ‚Klasse‘:‚klassen hier‘, }.' – user6731765

+0

Art von Arbeit, ändert es die Klasse eines Eingangs- und eine Auswahl innerhalb eines div, die innen ein Div, das hält, dass auch ein Label hält. – lmiguelvargasf

1

Warum nicht so etwas wie dieses

self.helper.layout = Layout(
    Div(
     Field('message'), css_class="class-here" 
    ), 

    # Field('description'), # or this way if you don't want to wrap around div 
) 
+0

das Problem aktualisieren ist, dass ich die Klasse der Elemente ändern, möchte ich neue Elemente nicht hinzufügen müssen. – lmiguelvargasf