Создайте пользователя с электронной почтой, которая была обработана с предыдущей страницы, с помощью UserCreationForm Django - PullRequest
0 голосов
/ 22 ноября 2018

Я пытаюсь создать пользователя с электронной почтой в качестве имени пользователя, и электронная почта сначала просматривается, т. Е. Электронная почта не зарегистрирована, а затем создается пользователь.Как я могу передать или установить электронное письмо в forms.py, поскольку оно уже было обработано на предыдущей странице?

Models.py

from django.contrib.auth.models import AbstractBaseUser
from django.db import models

class CUserManager(models.Manager):
    def _create_user(self, email, password, **extra_fields):

        now = timezone.now();

        if not email:
            raise ValueError(_('Email is required'))

        user = self.model(
            email = email,
            date_joined = now, **extra_fields
        )

        user.set_password(password)  
        user.save(using = self._db)

        return account

    def create_user(self, email, password=None, **extra_fields):
        return self._create_user(email, password, **extra_fields)

    def get_by_natural_key(self, email):
        return self.get(email=email)

    def create_superuser(self, email, password, **extra_fields):
        return self._create_user(email, password,**extra_fields)

class CUser(AbstractBaseUser):

    email = models.EmailField(_('email address'), unique=True)
    first_name = models.CharField(_('first name'), max_length=255)
    last_name = models.CharField(_('last name'), max_length=255)
    date_joined = models.DateTimeField(_('date created'), auto_now_add=True)
    is_active = models.BooleanField(default=True)    

    objects = CUserManager()

    USERNAME_FIELD = 'email'
...

Forms.py

from django.contrib.auth.forms import UserCreationForm

class RegistrationForm(UserCreationForm):

    class Meta: 
        model = CUser
        fields = ('first_name', 'last_name', 'password1', 'password2')

в HTML

 <form action=""  method="post" role="form">
    {% csrf_token %}
  {{ form.as_p }}
  <input type="submit" value="Submit" />
</form>

Письмо пришло из сессии ['email'], который сохраняется на предыдущей странице.

Как передать этот сеанс ['email'] на forms.py?

1 Ответ

0 голосов
/ 22 ноября 2018

Вы можете попробовать вот так:

 # Form

 class RegistrationForm(UserCreationForm):

    class Meta: 
        model = CUser
        fields = ('first_name', 'last_name', 'password1', 'password2')

    def save(self, **kwargs):
       email = kwargs.pop('email')
       user = super(RegistrationForm, self).save(commit=False)
       user.set_password(self.cleaned_data['password1'])
       user.email = email
       user.save()
       return user

# View

# your form codes...

if form.is_valid():
    form.save(email=request.session.get('email'))
    # rest of the codes

Что я здесь делаю, так это то, что сначала я переопределил этот метод сохранения, чтобы получить значение электронной почты из аргументов ключевого слова.Затем я передаю значение электронной почты в метод сохранения ModelForm.Надеюсь, это поможет !!

...