31

可能是一个糟糕的问题,但我正在使用 Django 的 UserCreationForm(稍作修改以包含电子邮件),并且我想删除 Django 自动显示在 HTML 页面上的 help_text。

在我的 HTML 页面的注册部分,它有用户名、电子邮件、密码 1 和密码 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>
4

10 回答 10

56

您可以将help_text字段设置为无__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 

但在你的情况下,我的解决方案会很好用。

于 2012-11-02T21:08:34.097 回答
17

另一个更简洁的选择是在 Meta 类中使用 help_texts 字典。例子:

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。不知道为什么。

于 2017-05-14T19:05:43.517 回答
9

您可以像这样将 css 类添加到registration_form.html 文件中。

<style>

.helptext{
  visibility: hidden;
}

</style>

于 2016-07-13T12:37:15.427 回答
6

简单的 CSS 解决方案。

<style>
     #hint_id_username, #hint_id_password1 {
         display: none;
     }
</style>

当表单呈现检查页面源代码时,您将看到每个帮助文本的 id。比如hint_id_username对于每个表单域。使用上面的 CSS 隐藏文本。

于 2019-06-17T17:11:52.997 回答
3

我有一个类似的问题。根据其中一条评论,这是阅读文档后的解决方案。

class UserCreateForm(UserCreationForm):
    password1 = forms.CharField(label='Enter password', 
                                widget=forms.PasswordInput)
    password2 = forms.CharField(label='Confirm password', 
                                widget=forms.PasswordInput)
    class Meta:
        model=User
        fields=("username","email","first_name",
                "last_name","password1","password2")
        help_texts = {
            "username":None,
        }

基本上,我们正在尝试做的是通过为我们的新类表单重新创建密码字段来覆盖自动设置。

于 2020-08-05T13:43:12.607 回答
1

或者只是遍历表单字段并省略输出“field.help_text”

{% for field in form %}
    <div class="fieldWrapper">
        {{ field.errors }}
        {{ field.label_tag }} {{ field }}
        <!--
        {% if field.help_text %}
           <p class="help">{{ field.help_text|safe }}</p>
        {% endif %}
        -->
    </div>
{% endfor %}

Django 文档: https ://docs.djangoproject.com/en/3.0/topics/forms/#looping-over-the-form-s-fields

于 2020-07-03T11:07:05.720 回答
0

对于那些想要更改密码 1 和 2 的默认文本而无需重新创建默认模型的人,可以尝试像我一样做。只需在您的类元下面添加这个初始化函数。

def __init__(self, *args, **kwargs):
      super().__init__(*args, **kwargs)
      self.fields['password1'].help_text='Your text'
      self.fields['password2'].help_text='Your text'
于 2021-04-24T16:58:22.547 回答
0

只需转到 UserCreationForm 并进行所需的更改。

非常简单的按住键盘上的控制按钮并点击 UserCreationForm 您将获得 UserCreationForm 根据您的需要进行所需的更改并保存它。正如我在下面的示例中为我所做的那样,我评论了帮助内容。

  error_messages = {
    'password_mismatch': _("The two password fields didn't match."),
}
password1 = forms.CharField(
    label=_("Password"),
    strip=False,
    widget=forms.PasswordInput,
    # help_text=password_validation.password_validators_help_text_html(),
)
password2 = forms.CharField(
    label=_("Password confirmation"),
    widget=forms.PasswordInput,
    strip=False,
    help_text=_("Enter the same password as before, for verification."),
)
于 2020-02-15T14:18:21.163 回答
0

只需覆盖该字段的 help_text 属性。

例如

username = forms.CharField(help_text=None)

您无需更改任何其他参数。它会正常工作。

于 2021-07-24T16:20:32.563 回答
-1

添加此 CSS 以删除帮助文本。

<style>
    .helptext {
      visibility: hidden;
    }
    body > main > form > ul > li{
      display: none;
    }
 </style>
于 2021-06-04T10:47:29.923 回答