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.

Вернуться на верх