Вероятно, это плохой вопрос, но я использую Django UserCreationForm (слегка измененный для включения электронной почты), и я хотел бы удалить help_text, который Django автоматически отобразит на странице HTML.
В разделе "Регистрация" моей HTML-страницы у него есть поля Username, E-mail, Password1 и Password 2. Но под именем "Обязательно. 30 символов или меньше". Буквы, цифры и @... только ". И в разделе" Подтверждение пароля "(" Пароль 2 ")" Введите тот же пароль, что и выше для проверки".
Как удалить их?
#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>
Ответ 1
Вы можете установить help_text
полей в None в __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()
выход:
<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>
Если вы делаете слишком много изменений, в таких случаях лучше просто переопределить поля, например.
class UserCreateForm(UserCreationForm):
password2 = forms.CharField(label=_("Whatever"), widget=MyPasswordInput
но в вашем случае мое решение будет работать очень хорошо.
Ответ 2
Другой, более чистый вариант - использовать словарь help_texts в классе Meta. Пример:
class UserCreateForm(UserCreationForm):
...
class Meta:
model = User
fields = ("username", "email", "password1", "password2")
help_texts = {
'username': None,
'email': None,
}
Более подробная информация здесь: https://docs.djangoproject.com/en/1.11/topics/forms/modelforms/#overriding-the-default-fields
Работает идеально для имени пользователя и электронной почты, но не работает для пароля2. Понятия не имею почему.
Ответ 3
Вы можете добавить класс css в файл registration_form.html, как это.
<style>
.helptext{
visibility: hidden;
}
</style>
Ответ 4
Простое решение CSS.
<style>
#hint_id_username, #hint_id_password1 {
display: none;
}
</style>
Когда рендеринг форм проверяет исходный код страницы, вы увидите идентификатор для каждого текста справки. Например, hint_id_username
для каждого поля формы. Используйте вышеупомянутый CSS, чтобы скрыть текст.