Как создать форму регистрации для пользовательской реализации из модели CustomUser с добавленным дополнительным полем? - PullRequest
0 голосов
/ 08 января 2020

Я работаю над внедрением пользовательского приложения в мой проект, потому что встроенный django auth не выполняет функции, которые мне нужны. Следующий код я частично взял из официальной django документации. Я создал MyUser модель

from django.db import models                                 
from django.contrib.auth.models import AbstractBaseUser    
from django.utils.translation import ugettext_lazy as _

from .managers import CustomUserManager                                                                               

class MyUser(AbstractBaseUser):                                   
   username = models.CharField(max_length=40,null=True)       
   email = models.EmailField(_('email adress'),unique=True)                                                                
   date_joined = models.DateTimeField(auto_now_add=True,null=True)                                                     last_login = models.DateTimeField(auto_now=True, null=True)                                                             
   is_staff = models.BooleanField(default=False)
   is_active = models.BooleanField(default=True)                
   is_admin = models.BooleanField(default=False)
   is_superuser = models.BooleanField(default=False)
   USERNAME_FIELD = 'email'                                       
   REQUIRED_FIELDS = []

   objects = CustomUserManager()

   def __str__(self):
       return self.email
   def has_perm(self,perm,obj=None):                                
       return True                                          
   def has_module_perms(self,app_label):                             
       return True                                              
   @property
   def is_stuff(self):
       return self.is_admin

У меня также есть Managers.py файл, в котором он создан

from django.contrib.auth.models import BaseUserManager
from django.utils.translation import ugettext_lazy as _

class CustomUserManager(BaseUserManager):
    def create_user(self,email,password=None,**extra_fields):
        """
        Create and save user with the    
        given email and password
       """                                                       
       if not email:                                                  
           raise ValueError(_('The email must be set'))          
       email = self.normalize_email(email)
       user = self.model(email=email,**extra_fields)                
       user.set_password(password)                                   
       user.save(using=self._db)
       return user

  def create_superuser(self,email,password,**extra_fields):
      """                                                         
      Create and save SuperUser with   
      the given email and
      password                                                              
      """
      extra_fields.setdefault('is_staff',True)
      extra_fields.setdefault('is_superuser',True)
  extra_fields.setdefault('is_active',True)                                                                             
      user = self.create_user(email=self.normalize_email(email),password=password,**extra_fields)        
      if extra_fields.get('is_staff') is not True:                  
          raise ValueError(_('Superuser must have is_staff=True.'))
      if extra_fields.get('is_superuser') is not True:
          raise ValueError(_('Superuser must have is_superuser=True.'))                                                        
      user.save(using=self._db)
      return user

Теперь я хочу создать форму регистрации, которую пользователи будут использовать для регистрации на моем сайт. Я создал файл form.py

 from django import forms
 from django.contrib.auth.forms import UserCreationForm                                               
 from .models import MyUser    

 class CustomUserCreationForm(UserCreationForm):
     class Meta:                                                       
          model = MyUser                                              
          fields = ('username','email')

Здесь я запутался, потому что при создании формы CustomUserCreation я не указывал поля password1 и password2, потому что они не в модели MyUser. Могу ли я указать поля пароля следующим образом

 from django import forms
 from django.contrib.auth.forms import UserCreationForm                                               
 from .models import MyUser    

 class CustomUserCreationForm(UserCreationForm):
     password = Forms.CharField(widget=forms.PasswordInput)
     password2 = Forms.CharField(widget=forms.PasswordInput)
     class Meta:                                                       
          model = MyUser                                              
          fields = ('username','email')
...