如何在django默认用户表中添加自定义用户字段(phone_number)?

时间:2018-05-14 14:15:10

标签: django-models django-forms django-views

我需要将一个名为phone_number的自定义字段添加到默认的django用户表

一切正常,但phone_number字段和值未保存在表Django用户中。

这是我的自定义表单代码

class SignUpForm(UserCreationForm):
    username = forms.EmailField(label="Email Address", max_length=254, help_text='Required a valid email address.')
    phone_number = forms.CharField(max_length=30, help_text='Required.')

    class Meta:
        model = User
        fields = ('first_name', 'last_name', 'username', 'phone_number', 'password1', 'password2')

以下是我的用户注册视图代码

def signup(request):
    if request.method == 'POST':
        form = SignUpForm(request.POST)
        if form.is_valid():
            user = form.save(commit=False)
            user.is_active = False
            user.save()
            current_site = get_current_site(request)
            mail_subject = 'Activate Your  Account.'
            message = render_to_string('app/account_activation_email.html', {
                'user': user,
                'domain': current_site.domain,
                'uid': urlsafe_base64_encode(force_bytes(user.pk)).decode(),
                'token': account_activation_token.make_token(user),
            })
            to_email = form.cleaned_data.get('username')
            email = EmailMessage(
                        mail_subject, message, to=[to_email]
            )
            email.send()

            return render(request, 'app/account_confirm_message.html')
    else:
        form = SignUpForm()
    return render(request, 'app/signup.html', {'form': form})

我的模特在这里

class Profile(models.Model):
    STUDENT = 1
    TEACHER = 2
    ROLE_CHOICES = (
        (STUDENT, 'Student'),
        (TEACHER, 'Teacher'),
    )
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    email_confirmed = models.BooleanField(default=False)
    role = models.PositiveSmallIntegerField(choices=ROLE_CHOICES, null=True, blank=True)

    # this method called for admin panel
    class Meta:
        verbose_name = 'profile'
        verbose_name_plural = 'profiles'

    def __str__(self):
        return self.user.username


@receiver(post_save, sender=User)
def update_user_profile(sender, instance, created, **kwargs):
    if created:
        Profile.objects.create(user=instance)
    instance.profile.save()

0 个答案:

没有答案