Ручной пароль с полем скрытого пароля Django - PullRequest
0 голосов
/ 27 декабря 2018

Я использую встроенную пользовательскую модель django.Я хочу создать пароль для пользователя, как «test @ 123» для всех.без отображения поля пароля в шаблоне

register.py

@login_required
def register(request):
    if request.method == 'POST':
        ur_form = UserRegisterForm(request.POST)
        pr_form = UserProfileForm(request.POST, request.FILES)
        if ur_form.is_valid() and pr_form.is_valid():

            new_user = ur_form.save(commit=False)            
            new_user.username = new_user.email
            password = 'test@123'
            new_user.password = password
            new_user.save()

            profile =  pr_form.save(commit=False)
            if profile.user_id is None:
                profile.user_id = new_user.id
                profile.user_role_id = 3
            profile.save()

            username = ur_form.cleaned_data.get('username')
            messages.success(request, 'Your Account has been created for %s!' % username)
            return redirect('users')
    else:
        ur_form = UserRegisterForm()
        pr_form = UserProfileForm()
    return render(request, 'users/register.html', {'ur_form': ur_form, 'pr_form': pr_form})

Forms.py

class UserRegisterForm(UserCreationForm):
    email = forms.EmailField()
    first_name = forms.CharField()
    last_name = forms.CharField()
    class Meta:
        model = User
        fields = ['first_name','last_name', 'email']

    def __init__(self, *args, **kwargs):
       super(UserRegisterForm, self).__init__(*args, **kwargs)
       del self.fields['password1']
       del self.fields['password2']

Ответы [ 2 ]

0 голосов
/ 27 декабря 2018

Вы можете использовать set_password метод для этого.Например;

new_user = ur_form.save(commit=False)            
new_user.username = new_user.email
password = 'test@123'
new_user.set_password(password) # <- here
new_user.save()

Из документации ;

Устанавливает пароль пользователя для данной необработанной строки с учетом хеширования пароля.Не сохраняет объект User.

0 голосов
/ 27 декабря 2018

Измените эту строку new_user.password = password на new_user.password1 = user.set_password(password)

и исправьте строку new_user = ur_form.save(commit=False на new_user = ur_form.save(commit=False)

удалите эту форму forms.py

def __init__(self, *args, **kwargs):
       super(UserRegisterForm, self).__init__(*args, **kwargs)
       del self.fields['password1']
       del self.fields['password2']

Окончательное редактирование: в UserRegisterForm

new_user = f.save(commit=True)
new_user.password = new_user.set_password('sdfasd')

и в forms.py

class UserRegisterForm(ModelForm):
    class Meta:
        model = User
        fields = ('first_name', 'last_name', 'email', )
...