Как переопределить модель формы для создания пользователя в Django

Я пытаюсь создать нового пользователя из modelform путем вызова CustomerUserManager в managers.py

class CustomUserCreationForm(UserCreationForm):
    def __init__(self, *args, **kwargs):
        super(CustomUserCreationForm,self).__init__(*args, **kwargs)

        try:
            if args[0]["email"]:
                self.email= args[0]["email"]
                self.password= args[0]["password1"]
        except:
            pass

    class Meta:
        model = CustomUser
        fields = "__all__"

    def save(self, **kwargs):
        
        return CustomUserManager.create_user(self,email=self.email,password=self.password,name="hic")

В файле managers.py есть

class CustomUserManager(BaseUserManager):

    def create_user(self, email, password, name,**extra_fields):
       ...
        user = self.model(email=email,name=name, stripe_customer_id=customer.id ,**extra_fields)

        user.set_password(password)
        user.save()
        return user

Очевидно, что self.model не существует, так как же я могу правильно создать этого пользователя из modelform? Если я импортирую модель, я получаю циркулярную ошибку import.

вот мой model.py

class CustomUser(AbstractUser):
    username = None
    email = models.EmailField(_('email address'), unique=True)
    name = models.CharField(verbose_name=_("first name"), max_length=50)
    stripe_customer_id = models.CharField(max_length=120)

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = ['name']

    objects = CustomUserManager()

Я не совсем понимаю, зачем вам нужна функция сохранения в форме, а не в представлении, использующем функцию сохранения модели save() после проверки данных формы...

С учетом этого, если вам нужна функция create_user в вашем менеджере, вы будете вызывать ее следующим образом

from django.contrib.auth import get_user_model
get_user_model().objects.create_user(...)

Это должно обеспечить присутствие модели, на которую можно ссылаться.

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