首页 > 解决方案 > Django allauth 与用户 Moel 中的自定义字段

问题描述

我正在尝试使用 Django All Auth 使用自定义用户模型和表单进行登录和注册。

class User(AbstractBaseUser, PermissionsMixin):
    username = models.CharField(_('username'), max_length=130, unique=True)
    full_name = models.CharField(_('full name'), max_length=130, blank=True)
    is_staff = models.BooleanField(_('is_staff'), default=False)
    is_active = models.BooleanField(_('is_active'), default=True)
    date_joined = models.DateField(_("date_joined"), default=date.today)
    phone_number_verified = models.BooleanField(default=False)
    change_pw = models.BooleanField(default=True)
    phone_number = models.BigIntegerField(unique=True,default=create_new_ref_number())
    country_code = models.IntegerField(default='91')
    two_factor_auth = models.BooleanField(default=False)
    USER_TYPE_CHOICES = (
      (1, 'student'),
      (2, 'teacher'),
      (3, 'unassigned'),
      (4, 'teacherAdmin'),
      (5, 'systemadmin'),
  )

    user_type = models.PositiveSmallIntegerField(choices=USER_TYPE_CHOICES,default=3)

    objects = UserManager()

    USERNAME_FIELD = 'username'
    REQUIRED_FIELDS = ['full_name', 'phone_number', 'country_code']

我不确定我应该如何或在哪里从正在注册的用户那里获得 phone_number。由于该字段是必填且唯一的,因此我使用随机数来暂时具有一些价值。

这是我的登录表单。我可以使用登录网址进行注册。我无法弄清楚这个网址是否应该不同。

请建议。

 <div class="container " style="padding-top: 40px;padding-left:0px; padding-right:0px;">
<div class="col-sm-12 col-xs-12 col-md-4 justify-content-center" >            
        <form class="account-register shadow-5  mt-4 mb-4" id="login_form" method="POST"
                action="./?next={{ redirect_to }}" autocomplete="off" style="background-color:#f5f8fb !important;">
                <div class="text-center ">
                  <h3><i class="fa fa-lock fa-2x mt-3"></i></h3>
                </div>
                <h3 class="text-center mt-4">Login</h3>
                {% csrf_token %}
                <div class="google-signup-btn-qc ggl-btn mb-3 ml-4 mr-4">
                    <span class="logo-wrapper-qc">
                    <img src ={% static "images/google-signup.png" %} alt="Google">
                    </span>
                    <span class="btn-label">
                    <a title="Google" class="socialaccount_provider google" style="text-decoration:none;" href={% provider_login_url "google"%} >Sign in with Google</a>
                    </span>
                </div>
                <h4 class="text-center">OR </h4>
                <div class="form-group{% if form.username.errors %} has-error{% endif %} ml-4 mr-4" >
                    <label class="control-label" for="id_username" style="font-weight:700;">Email Address</label>
                    <input class="form-control input-lg input-form-custom" id="id_username" maxlength="150" name="username"  pattern="[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}$" type="text" required />
                    <div class="error-block">{{ form.username.errors }}</div>
                </div>
                <div class="form-group{% if form.password.errors %} has-error{% endif %} ml-4 mr-4">
                    <label class="control-label" for="id_password" style="font-weight:700;">Password</label>
                    <div class="input-group input-group-lg">
                    </div>
                    <input class="form-control input-lg input-form-custom" id="id_password" name="password" type="password" required />
                    <span toggle="#id_password" class="fa fa-fw fa-eye field-icon toggle-password"></span>
                    <div class="error-block">{{ form.password.errors }}</div>
                </div>
                <input type="hidden" name="next" value="{{ request.GET.next }}"/>
                <button type="submit" name="login"
                    class="btn btn-primary btn-block  form-group shadow-3 mt-3 ml-4 mr-2" style="background-color: #262B40 !important;
                    border-color: #262B40 !important;
                    box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(46, 54, 80, 0.075) !important; width:87%" >
                Login<i class="fa fa-sign-in" aria-hidden="true"></i>
                </button>    
                <br/>
            </form>
    </div>

标签: djangodjango-formsdjango-allauthdjango-login

解决方案


推荐阅读