Django: как изменить поля регистрации по умолчанию

Я борюсь с изменением UserCreationForm по умолчанию - мне удалось добавить одно дополнительное поле, создав дочерний класс:

class SignUpForm(UserCreationForm):
    display_name = forms.CharField(max_length=32, help_text='Your display name')

    class Meta:
        model = User
        fields = ('username', 'display_name', 'password1', 'password2', )

def register(request):
    if request.method == 'POST':
        form = SignUpForm(request.POST)
        if form.is_valid():
            user = form.save()
            user.refresh_from_db()
            user.profile.display_name = form.cleaned_data.get('display_name')
            user.save()
            raw_password = form.cleaned_data.get('password1')
            user = authenticate(username=user.username, password=raw_password)
            login(request, user)
            return redirect('user/home')
    else:
        form = SignUpForm()
    return header.views.show(request, 'userpanel/register.html', context={'form': form})

Вместе с шаблоном:

<form method="post">
    {% csrf_token %}
    {% for field in form %}
    <p>
        {{ field.label_tag }}<br>
        {{ field }}
        {% if field.help_text %}
        <small style="color: grey">{{ field.help_text | safe }}</small>
        {% endif %}
        {% for error in field.errors %}
        <p style="color: red">{{ error | safe }}</p>
        {% endfor %}
    </p>
    {% endfor %}
    <button type="submit">Sign up</button>
</form>

Мне удалось создать следующую страницу:

enter image description here

Но у меня проблема с изменением текста описания на странице. Теперь, если я хочу изменить Необходимые. 150 символов или меньше. Только буквы, цифры и @ /. / + / - / _. на что-то другое, как это сделать?

3
0
1 545
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ладно, разобрался. Список всех свойств формы:

form = SignUpForm()
for d in dir(form):
    print(d)

Путем проб и ошибок я обнаружил, что вы можете перечислить поля формы:

form = SignUpForm()
for d in form.fields:
    print('field name:', d)
    print('field label:', form.fields[d].label)
    print('field text:', form.fields[d].help_text)
    print("")

возвращает:

field name: username
field label: Username
field text: Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.

field name: display_name
field label: None
field text: Your display name

field name: password1
field label: Password
field text: <ul><li>Your password can&#39;t be too similar to your other personal information.</li><li>Your password mus
t contain at least 8 characters.</li><li>Your password can&#39;t be a commonly used password.</li><li>Your password can&
#39;t be entirely numeric.</li></ul>

field name: password2
field label: Password confirmation
field text: Enter the same password as before, for verification.

Я могу легко изменить эти поля, написав:

x = form.fields['username']
x.label = "foo"
x.help_text = "bar"

и я получил:

enter image description here

Отметьте, что ваш ответ принят, чтобы отметить вопрос как решенный!

Ines Tlili 10.08.2018 15:32

Я могу это сделать за два дня.

Ch3shire 10.08.2018 19:32

Другие вопросы по теме