从Django UserCreateForm中删除help_text

Chr*_*Yin 20 python django django-models django-registration

可能是一个糟糕的问题,但我正在使用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>
Run Code Online (Sandbox Code Playgroud)

Anu*_*yal 39

您可以将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()
Run Code Online (Sandbox Code Playgroud)

输出:

<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>
Run Code Online (Sandbox Code Playgroud)

如果您进行了太多更改,在这种情况下,最好只覆盖字段,例如

class UserCreateForm(UserCreationForm):
    password2 = forms.CharField(label=_("Whatever"), widget=MyPasswordInput 
Run Code Online (Sandbox Code Playgroud)

但在你的情况下,我的解决方案将非常有效.


小智 6

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

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

更多信息请访问:https://docs.djangoproject.com/en/1.11/topics/forms/modelforms/#overriding-the-default-fields

适用于用户名和电子邮件,但不适用于password2.不知道为什么.

  • 我同意文档说这应该可行,但对我也不起作用,甚至对“ username”和“ password1”也不起作用。如果有人对应用此选项的必要条件有更多的了解,请分享。我调试了一段时间,但是当我渲染这个表单时,Django甚至没有接近任何一个`help_texts`字段。 (3认同)
  • 请参阅本段中的第一个绿色框(“注意”):https://docs.djangoproject.com/en/3.0/topics/forms/modelforms/#overriding-the-default-fields。 (2认同)

小智 6

简单的 CSS 解决方案。

<style>
     #hint_id_username, #hint_id_password1 {
         display: none;
     }
</style>
Run Code Online (Sandbox Code Playgroud)

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


Tak*_*ame 5

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

<style>

.helptext{
  visibility: hidden;
}

</style>
Run Code Online (Sandbox Code Playgroud)

  • 问题是关于 HTML 中的 _removing _,那么 CSS 就无法完成这项工作。 (2认同)