Как переопределить модель формы для создания пользователя в 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(...)
Это должно обеспечить присутствие модели, на которую можно ссылаться.