Я обнаруживаю Django (v2.1.1
) и хочу настроить страницу входа , в которой у меня есть 2 поля электронных писем, если эти 2 поля идентичны, я звоню form.is_valid()
.
Дерево проекта :
├── manage.py
├── requirements.txt
├── project
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ ├── views.py
│ ├── wsgi.py
│ └── templates
│ ├── base.html
│ ├── project
│ │ └── home.html
│ └── registration
│ ├── logged_out.html
│ ├── login.html
│ └── signin.html
└── app
├── __init__.py
├── admin.py
├── apps.py
├── models.py
├── urls.py
├── views.py
├── migrations
└── templates
└── app
└── home.html
Конфигурация интернационализации в project/settings.py
:
# (…)
# Internationalization
LANGUAGE_CODE = 'fr-fr'
USE_I18N = True
USE_L10N = True
# (…)
С базовый вид входа в Django это хорошо работает :
project/views.py
:
from django.shortcuts import render, redirect
from django.contrib.auth import login, authenticate
from django.contrib.auth.forms import UserCreationForm
def index(request):
return render(request, 'project/home.html', {'context':'project index'})
def signin(request):
# (…)
form = UserCreationForm()
return render(request, 'registration/signin.html', {'form': form})
У меня есть хороший французский перевод HTML-форма (кроме submit button
):
Давайте добавим поле email
в форму, email
- этовстроенные пользовательские поля (как first_name
& last_name
), поэтому я просто добавляю новый класс SignInForm
, унаследованный от UserCreationForm
:
project/forms.py
:
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User
class SignInForm(UserCreationForm):
class Meta:
model = User
fields = ('username', 'email', 'password1', 'password2')
Я обновляю project/views.py
:
# (…)
from project.forms import SignInForm
# (…)
def signin(request):
# (…)
form = SignInForm()
return render(request, 'registration/signin.html', {'form': form})
Это работает : добавлено хорошее французское переведенное поле , но оно не имеет атрибута help_text
:
Теперь я застрял ...
Если я хочу установитьАтрибут 'required': True
в поле email
(требуется, и я хочу показать переведенный help_text
).Единственный способ, который я нашел, это переопределить встроенное поле электронной почты, но я теряю перевод, и он не показывает help_text
:
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User
from django import forms
class SignInForm(UserCreationForm):
email = forms.EmailField(required=True)
class Meta:
model = User
fields = ('username', 'email', 'password1', 'password2')
Если я добавлю второе поле email2
, я надеялся скопировать оригинал User.email
с чем-то вроде email2 = User.email
, но похоже, что это не то место, где хранится электронная почта.Я могу использовать forms.EmailField()
, как указано выше, но мне бы очень хотелось воспользоваться встроенным переводом.
Тогда вот мои вопросы :
Как использовать поле email
с встроенными атрибутами (name, обязательно, help_text,…) и получать переводы?(Когда у меня есть ответ, я предполагаю, что найду способ сделать то же самое с submit
, first_name
& last_name
)
Могу ли я продублировать поле электронной почты с этим ограничением?(Я не хочу сохранять это второе поле, просто проверяю перед вызовом form.is_valid()
)
_