Django скрывает поля пароля на форме создания пользователя
У меня есть пользовательская модель пользователя и форма, которая позволяет администраторам добавлять пользователей без необходимости заходить в раздел администратора. Я хочу скрыть поля пароля и установить пароль в виде случайно сгенерированной строки. Затем отправить новому пользователю письмо со ссылкой для сброса пароля.
Пока что я не смог разобраться с первой частью - скрытием полей пароля.
Форма.py:
from django.contrib.auth.forms import UserCreationForm, UserChangeForm
from .models import CustomUser
class AddCompanyEmployeeForm(UserCreationForm):
class Meta:
model = CustomUser
fields = UserCreationForm.Meta.fields + ('email', 'full_name', 'age')
взгляд:
from django.views.generic import CreateView, ListView
from django.urls.base import reverse
from .forms import CustomUserCreationForm, AddCompanyEmployeeForm
from .models import CustomUser
class SignUpView(CreateView):
form_class = CustomUserCreationForm
success_url = reverse_lazy('login')
template_name = 'registration/signup.html'
class AddCompanyEmployee(CreateView):
model = CustomUser
template_name = 'manage/add_employee.html'
form_class = AddCompanyEmployeeForm
#success_url = reverse_lazy('directory')
def get_success_url(self):
return reverse('userprofile_detail', kwargs={'pk': self.object.userprofile.pk})
Я попробовал несколько подходов, включая изменение формы на
class AddCompanyEmployeeForm(UserCreationForm):
class Meta:
model = CustomUser
fields = ('email', 'full_name', 'age')
Пока что поля пароля остаются видимыми, независимо от того, что я пытаюсь сделать. Есть предложения?
вам следует переопределить UserCreationForm следующим образом...
Регистрация пользователя
class UserCreateForm(UserCreationForm):
class Meta:
model = User
fields = ['username','email',]
exclude = ['password1','password1',]
после этого вы можете установить свой строковый пароль следующим образом в (views.py)
from django.contrib.auth.hashers import make_password
def RegisterView(request):
if request.method == 'POST':
form = UserCreateForm(request.POST)
if form.is_valid():
username = form.cleaned_data['username']
username = form.cleaned_data['email']
fm = form.save(commit=False)
fm.password = make_password('your_rendom_string')
fm.save()
messages.success(request,f'{username} Successfully Registred')
form = UserCreateForm()
return render(request, 'signup.html', {'form': form})
else:
form = UserCreateForm()
context = {'form': form, }
return render(request, 'signup.html', context)
Очевидно, что поля password1 и password2 определяются непосредственно в форме при использовании UserCreationForm, а не в модели. Поэтому исключение и поля не будут иметь никакого эффекта на них.
Вы должны создать форму с помощью ModelForm или Form.