将字段添加到以注册形式构建的django中

时间:2018-06-17 12:38:08

标签: django python-3.x

我正在尝试在我的django项目中创建自定义注册表单,但我仍然想使用已经有一些内置字段的from django.contrib.auth.forms import UserCreationForm。我已经创建了一个添加字段的表单,但我不知道如何将其添加到模型

from django import forms 
from django.contrib.auth.forms. import UserCreation
from django.contrib.auth.models import User

class SignUpForm(UserCreationForm):
    email = forms.CharField(max_length=254, required=True, widget=forms.EmailInput())
    teamNumber = forms.CharField(max_length=4, required=True)

    class Meta:
        Model = User
        fields= ('username', 'email', 'teamNumber', 'password1', 'password2')

我尝试过使用abstractUser,但这导致了错误的混合。

1 个答案:

答案 0 :(得分:0)

您可以使用一对一链接方法实现此目标,您需要做的是创建新模型(例如' 个人资料' )使用其他字段并将此模型与内置用户模型链接为一对一。

class Profile(models.Model):
    #one-to-one link with built-in model
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    #additional fields
    email = forms.CharField(max_length=254, required=True, widget=forms.EmailInput())
    teamNumber = forms.CharField(max_length=4, required=True)

这链接了两个模型,但仍然需要定义两个信号(在同一个model.py文件中)以使模型正常工作,

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

@receiver(post_save, sender=User)
def save_user_profile(sender, instance, **kwargs):
    instance.profile.save()

这些信号在创建和更新内置用户模型时创建和保存配置文件条目。

此外,您无需创建自己的电子邮件字段,因为内置用户模型已有电子邮件字段,请务必查看:)

注意:还有其他方法可以实现这一目标,但我个人更喜欢这种方法而不是其他两种方法(在下面的链接中提到),因为它更清晰,更易于维护和考虑。

请查看这篇关于扩展Django内置用户模型的精彩博客: link 那里的作者精美地解释了这三种方法以及它们是如何工作的。