2017-05-26 18 views
0

何かの理由でプレースホルダをフィールドに追加したいのですが、これは機能しません。私がページソースを見ると、プレースホルダ属性はそこにさえありません。ここでDjangoフォームでウィジェットがレンダリングされない

は私forms.pyです:

class RegistrationForm(UserCreationForm): 
    email = forms.EmailField(required=True, max_length=254) 

    class Meta: 
     model = User 
     fields = ('username', 'email', 'password1', 'password2',) 
     widgets = { 
      'username' : forms.TextInput(attrs={'placeholder': 'Username'}),   
      'email' : forms.TextInput(attrs={'placeholder': 'Email'}), 
      'password1' : forms.TextInput(attrs={'placeholder': 'Password'}), 
      'password2' : forms.TextInput(attrs={'placeholder': 'Confirm Password'}), 
     } 

これは私がHTMLのために使用していますテンプレートです:

ModelFormため docsによると、 Metaクラスのみを生成するために使用される
<!DOCTYPE html> 

{% extends 'base.html' %} 
{% load staticfiles %} 

{% block content %} 
<section class="container"> 
    <div class="row centre-v"> 
    <div class="card login-card"> 
     <div class="main card-block"> 
     <h1>Sign up</h1> 
     <div class="login-or"> 
      <hr class="hr-or"> 
     </div> 
     <form action="." method="post" class="register-form"> 
      {% csrf_token %} 
      {% for field in form %} 
      <p> 
       {{ field }} 
       {% for error in field.errors %} 
       <div class="alert alert-danger" role="alert"><strong>{{ error }}</strong></div> 
       {% endfor %} 
      </p> 
      {% endfor %} 
      <div class="btn-login"> 
      <input class="btn btn-info" type="submit" value="Register"> 
      </div> 
     </form> 
     </div> 
    </div> 
    </div> 
</section> 
{% endblock %} 

答えて

0

基礎となるモデルのフィールドModelFormクラスで明示的に宣言されたフィールドは、Metaで設定された属性の影響を受けません。あなたのクラスにemailと宣言し、password1password2は、継承されたUserCreationFormクラスで宣言されています。 (usernameが自動的に生成されるので、Metaクラスで設定したウィジェット属性がそのフィールドで機能している可能性があります)。宣言されたフィールドの属性を設定するには、self.fields dictを使用します。

class RegistrationForm(UserCreationForm): 
    email = forms.EmailField(required=True, max_length=254) 

    class Meta: 
     model = User 
     fields = ('username', 'email', 'password1', 'password2',) 

    def __init__(self, *args, **kwargs): 
     super().__init__(*args, **kwargs): 
     self.fields['username'].widget.attrs['placeholder'] = 'Username' 
     self.fields['email'].widget.attrs['placeholder'] = 'Email' 
     self.fields['password1'].widget.attrs['placeholder'] = 'Password' 
     self.fields['password2'].widget.attrs['placeholder'] = 'Confirm Password' 
関連する問題