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

もう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には機能しません。理由はわかりません。

于 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

同様の問題がありました。コメントの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,
        }

基本的に、私たちがやろうとしているのは、新しいクラスフォームのパスワードフィールドを再作成することにより、自動設定を上書きすることです。

于 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

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

デフォルトのモデルを再作成せずにパスワード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'
于 2021-04-24T16:58:22.547 に答える
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 に答える