2012-11-02 5 views
9

Wahrscheinlich eine schlechte Frage, aber ich benutze Django UserCreationForm (leicht modifiziert, um E-Mail enthalten), und ich möchte den Hilfetext entfernen, die Django automatisch auf der HTML-Seite anzeigt.Entfernen von help_text von Django UserCreateForm

Im Registerbereich meiner HTML-Seite befinden sich die Felder Benutzername, E-Mail, Passwort1 & Passwort 2. Aber unter Benutzername ist "Erforderlich. 30 Zeichen oder weniger. Nur Buchstaben, Ziffern und @ ...". Und unter Password Confirmation (Password 2) heißt es "Gib das gleiche Passwort wie oben zur Bestätigung ein."

Wie entferne ich diese?

#models.py 
class UserCreateForm(UserCreationForm): 
    email = forms.EmailField(required=True) 

    def save(self, commit=True): 
     user = super(UserCreateForm, self).save(commit=False) 
     user.email = self.cleaned_data['email'] 
     if commit: 
      user.save() 
     return user 

    class Meta: 
     model = User 
     fields = ("username", "email", "password1", "password2") 
     exclude = ('username.help_text') 

#views.py 
def index(request): 
    r = Movie.objects.all().order_by('-pub_date') 
    form = UserCreateForm() 
    return render_to_response('qanda/index.html', {'latest_movie_list': r, 'form':form},  context_instance = RequestContext(request)) 

#index.html 
<form action = "/home/register/" method = "post" id = "register">{% csrf_token %} 
    <h6> Create an account </h6> 
    {{ form.as_p }} 
    <input type = "submit" value = "Create!"> 
    <input type = "hidden" name = "next" value = "{{ next|escape }}" /> 
</form> 

Antwort

20

Sie können help_text der Felder auf Keine in __init__

from django.contrib.auth.forms import UserCreationForm 
from django import forms 

class UserCreateForm(UserCreationForm): 
    email = forms.EmailField(required=True) 

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

     for fieldname in ['username', 'password1', 'password2']: 
      self.fields[fieldname].help_text = None 

print UserCreateForm() 

Ausgang:

<tr><th><label for="id_username">Username:</label></th><td><input id="id_username" type="text" name="username" maxlength="30" /></td></tr> 
<tr><th><label for="id_password1">Password:</label></th><td><input type="password" name="password1" id="id_password1" /></td></tr> 
<tr><th><label for="id_password2">Password confirmation:</label></th><td><input type="password" name="password2" id="id_password2" /></td></tr> 
<tr><th><label for="id_email">Email:</label></th><td><input type="text" name="email" id="id_email" /></td></tr> 

Wenn Sie zu viele Änderungen machen, in solchen Fällen ist es besser, nur Überschreibung die Felder z

class UserCreateForm(UserCreationForm): 
    password2 = forms.CharField(label=_("Whatever"), widget=MyPasswordInput 

aber in Ihrem Fall wird meine Lösung sehr gut funktionieren.

+1

genial. Danke für die Hilfe! –

2

Sie können der Datei registration_form.html die CSS-Klasse wie folgt hinzufügen.

<style> 
 

 
.helptext{ 
 
    visibility: hidden; 
 
} 
 

 
</style>

3

Ein andere, ist saubere Option help_texts Wörterbuch in der Klasse Meta zu verwenden. Beispiel:

class UserCreateForm(UserCreationForm): 
    ... 
    class Meta: 
     model = User 
     fields = ("username", "email", "password1", "password2") 
     help_texts = { 
      'username': None, 
      'email': None, 
     } 

Mehr Infos hier: https://docs.djangoproject.com/en/1.11/topics/forms/modelforms/#overriding-the-default-fields

perfekt funktioniert für Benutzernamen und E-Mail, aber funktioniert nicht für password2. Keine Ahnung warum.

+0

Arbeitete für mich für einen ForeignKey. Vielen Dank! – texnic

Verwandte Themen