django - 将字段添加到 django 内置的注册表单
问题描述
我正在尝试在我的 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 但这导致了错误的混合。
解决方案
您可以使用一对一的链接方法来实现这一点,您需要做的是创建带有附加字段的新模型(例如“配置文件”),并将该模型与内置用户模型一对一地链接。
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 内置用户模型的很棒的博客: 链接 那里的作者很好地解释了所有三种方法以及它们是如何工作的。
推荐阅读
- python - 使用 SQLite 和 python3 进行线程化
- php - 如何在没有 url 的情况下从 url 传递数据?像使用 PHP 的 domaintools.com/domainname.com
- r - 从闪亮的应用程序中调用 getwd()
- office-js - 如何为基于 Outlook Office-js 的加载项获取 Outlook 用户 UPN(用户主体名称)
- python - 有没有办法在 python 中获取给定框架的函数参数的原始值?
- amplience-dynamic-content - Amplience 动态内容中的本地化内容
- gulp - 使用 Gulp Rename 从文件名中删除空格
- string - 如何查找字符串中最后一次出现的字符?
- jenkins - 在 kubernetes 中使用 Jenkins 和 Deployment 构建特定于租户的 docker 镜像
- typo3 - Typo3:将所有 2 级页面输出为独立于活动页面的菜单