Django нет доступа к определенным методам AbstractUser с использованием UserManager

Я новичок в Django Я пытаюсь получить доступ к form.save() с помощью form = self.form_class(request.POST), но мне приходится использовать такие методы как self.get_form_class() для доступа к form.is_valid() и form.save(), но не могу получить метод set_password() из user = form.save(commit=False) Я не уверен, в чем проблема. Почему я не могу получить доступ к user.set_password()? Даже когда я пытаюсь создать BaseUserManager self.model() не дает мне определения для user.set_password() или user.save() почему так?

  1. Вы могли бы создать RegistrationForm, унаследованный от UserCreationForm
# forms.py
from django.contrib.auth.forms import UserCreationForm


class RegistrationForm(UserCreationForm):
    class Meta:
        model = CustomUser
        fields = ("first_name", "last_name", "username", "phone_number",)

что касается метода clean - вам не нужно проверять, отправил ли пользователь какое-то определенное поле, просто в вашей модели CustomUser вы должны добавить эти поля без null=True, blank=True. как пример:

class CustomUser(AbstractUser):
    first_name = models.CharField(_("first name"), max_length=150)

и теперь я могу удалить проверку на имя_первого_фамилии в clean-методе вашей регистрационной формы. В результате этого рефакторинга - clean-метод должен быть удален. Не беспокойтесь о поле confirm_password, оно существует в UserCreationForm, но называется password2, оригинальный пароль называется password1. и проверка пароля в этой форме также существует

  1. Ответ на ваш вопрос с помощью set_password из предыдущего пункта мы получили форму, унаследованную от UserCreationForm, у которой эта set_password логика уже записана в методе сохранения. Вам просто нужно вызвать form.save(). так что ваш пост-метод в представлении:
    def post(self, request):
        form = self.get_form_class()
        form = form(request.POST)
        if form.is_valid():
            form.save()

            messages.add_message(request, messages.SUCCESS, "Your account has been successfully created.")
            return redirect("AskQuestions:login")
        return render(request, self.template_name, {"form": form})
Вернуться на верх