2017-05-05 69 views
0

一个Django形式I具有以下模型:更改CSS类的元素的在使用的ModelForm

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, 
    ) 

,我必须使用该模型的形式如下:

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

问题是self.helper.label_class = 'col-xs-9'self.helper.field_class = 'col-xs-3'没有效果,我想设置特定元素的css类,例如messageamount

我得到的HTML是:

<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> 

我想改变的是对于标签元素,每个元素特别是输入元素的类。 我不知道该怎么做。任何人都可以帮我解决这个问题吗?

+0

你有没有考虑使用Javascript?或者这是不可能的? –

+0

@almostabeginner,是的,我想过JS,但我想知道你是否可以直接在django窗体中使用它或使用'self.helper'实例变量。 – lmiguelvargasf

回答

0

我没有与脆皮形式很多经验,所以这可能是错的,但请尝试以下操作:

对于第一个问题尝试self.helper = FormHelper(self)代替self.helper = FormHelper()

要设置的CSS类的一个特定的元素,你需要创建一个Layout,如:

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

Read more here

+0

问题是我想改变'self.fields ['message']'的类,而不是创建一个新的元素。我想要使​​用的元素在我的模型中。 – lmiguelvargasf

+0

这是否工作? 'self.fields ['message']。widget.attrs = { 'class':'class-here', }' – user6731765

+0

工作类型,它改变了一个输入的类和一个选择内部的div一个拥有该标签的div也拥有一个标签。 – lmiguelvargasf

1

为什么不这样做

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

问题是我想改变我没有添加新元素的元素的类。 – lmiguelvargasf