web-dev-qa-db-ja.com

Django UserCreateFormからhelp_textを削除する

おそらく悪い質問ですが、私は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>
22
Chris Yin

help_textのフィールドの__init__をNoneに設定できます

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 

しかし、あなたの場合、私の解決策は非常にうまく機能します。

41
Anurag Uniyal

もう1つのよりクリーンなオプションは、クラス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

ユーザー名と電子メールには最適ですが、password2には機能しません。理由はわかりません。

7
iustitia

このように、cssクラスをregistration_form.htmlファイルに追加できます。

<style>

.helptext{
  visibility: hidden;
}

</style>

シンプルなCSSソリューション。

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

フォームがレンダリングされると、ページのソースコードが検査され、各ヘルプテキストのIDが表示されます。といった hint_id_usernameフォームフィールドごと。上記のCSSを使用して、テキストを非表示にします。

3
Java_Man