2017-05-26 5 views
0

Ich möchte Platzhalter zu meinen Feldern hinzufügen, aber aus irgendeinem Grund funktioniert das nicht. Wenn ich die Seitenquelle anschaue, sind die Platzhalterattribute nicht einmal vorhanden.Django Formular nicht Widgets Widgets

Hier mein forms.py ist:

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

Dies ist die Vorlage ich für HTML bin mit:

<!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 %} 

Antwort

0

Nach dem docs für ModelForm, die Meta Klasse wird verwendet, nur dann zu erzeugen Felder aus dem zugrunde liegenden Modell. Felder, die explizit in der ModelForm-Klasse deklariert werden, sind von den in Meta festgelegten Attributen nicht betroffen. Sie deklarieren email in Ihrer Klasse und password1 und password2 sind in der geerbten UserCreationForm Klasse deklariert. (username wird automatisch generiert, so dass das Widget-Attribut, das Sie in der Klasse Meta festgelegt haben, möglicherweise für dieses Feld funktioniert hat.) Um Attribute für deklarierte Felder festzulegen, können Sie das 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'