首页 > 解决方案 > django 无法链接用户模型和相应的 from 以在模板中用于注册

问题描述

我有一个自定义用户模型子类化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时,数据库中的名称字段没有被填充(emailis 和用户帐户被创建......但没有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

标签: djangodjango-modelsdjango-rest-frameworkdjango-formsdjango-templates

解决方案


推荐阅读