从Django UserCreateForm中删除help_text

时间:2012-11-02 20:49:03

标签: 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>

10 个答案:

答案 0 :(得分:33)

您可以在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 

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

答案 1 :(得分:6)

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

body {
  font: 12px sans-serif;
  margin: 0;
}

.axis path,
.axis line {
  fill: none;
  stroke: #000;
  shape-rendering: crispEdges;
}

.x.axis path {
  display: none;
}

.line {
  fill: none;
  stroke: steelblue;
  stroke-width: 1.5px;
}

此处有更多信息:https://docs.djangoproject.com/en/1.11/topics/forms/modelforms/#overriding-the-default-fields

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

答案 2 :(得分:5)

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

&#13;
&#13;
<style>

.helptext{
  visibility: hidden;
}

</style>
&#13;
&#13;
&#13;

答案 3 :(得分:1)

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

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

基本上,我们要尝试的是通过为新的班级表单重新创建密码字段来替代自动设置。

答案 4 :(得分:0)

简单的CSS解决方案。

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

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

答案 5 :(得分: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."),
)

答案 6 :(得分:0)

或者只是遍历表单字段并省略输出“ 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

答案 7 :(得分:0)

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

def __init__(self, *args, **kwargs):
      super().__init__(*args, **kwargs)
      self.fields['password1'].help_text='Your text'
      self.fields['password2'].help_text='Your text'

答案 8 :(得分:0)

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

例如

username = forms.CharField(help_text=None)

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

答案 9 :(得分:-1)

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

<style>
    .helptext {
      visibility: hidden;
    }
    body > main > form > ul > li{
      display: none;
    }
 </style>