Django не может связать модель пользователя и соответствующую форму, которая будет использоваться в шаблоне для регистрации - PullRequest
0 голосов
/ 26 сентября 2019

У меня есть пользовательское подклассы пользовательской модели AbstractBaseUser:

class CustomUser(AbstractBaseUser, PermissionsMixin):


    email = models.EmailField(max_length=254, unique=True)
    name = models.CharField(max_length=254)
    username = models.CharField(max_length=254, blank=True)
    is_staff = models.BooleanField(default=False)

    is_superuser = models.BooleanField(default=False)

    is_active = models.BooleanField(default=True)

    last_login = models.DateTimeField(null=True, blank=True)

    date_joined = models.DateTimeField(auto_now_add=True)

    USERNAME_FIELD = 'email'

    EMAIL_FIELD = 'email'

    REQUIRED_FIELDS = ['name']

    objects = UserManager()

    def __str__(self):
        return self.email

    def get_absolute_url(self):
        return "/users/%i/" % (self.pk)

после миграции я создал простую форму для регистрации, в которой я сопоставляю два поля из модели: email и name как показано ниже:

class SignUpForm(ModelForm):
    class Meta:
        model = CustomUser
        fields = ['name', 'email']

Затем у меня есть view для визуализации template для отображения вышеуказанных полей в качестве полей ввода:

class MyRegisterView(RegisterView):

    def get(self, request):
        form = SignUpForm()
        return render(request, "registration.html", context={"form": form})

и в template, Я просто делаю:

<form method="post">
 {% csrf_token %}
  <h3>Sign Up</h3>

  <div>
     <label for="name">
         <input id = "name" name = "name" class="textfield" type="text" value="" placeholder="Name">
     </label>
  </div>

  <div>
     <label for="email">
         <input id = "email" name = "email" class="textfield" type="email" value="" placeholder="Email">
      </label>

(также включая passwords и т. Д.)

Проблема заключается в том, что когда я добавляю поле name и затем submit,Поле имени в базе данных не заполняется (email - и учетная запись пользователя создается ... но без name).Почему это?

ниже - мой обычай BaseUserManager, который я подклассифицирую: (может быть, я что-то упускаю в ниже Usermanager?)

class UserManager(BaseUserManager):

    def _create_user(self, name, email, password, is_staff, is_superuser, **extra_fields):
        if not email:
            raise ValueError('Users must have an email address')

        now = timezone.now()
        email = self.normalize_email(email)
        user = self.model(
            name=name,
            email=email,
            is_staff=is_staff,
            is_active=True,
            is_superuser=is_superuser,
            last_login=now,
            date_joined=now,
            **extra_fields
        )

        user.set_password(password)

        user.save(using=self._db)

        return user

    def create_user(self, name, email, password, **extra_fields):
        return self._create_user(name, email, password, False, False, **extra_fields)

    def create_superuser(self, name, email, password, **extra_fields):
        user = self._create_user(name, email, password, True, True, **extra_fields)
        user.save(using=self._db)
        return user
...