django - 如何使用一种形式将数据保存到多个模型?
问题描述
一个漂亮的菜鸟在这里。我正在尝试在使用信号创建帐户时创建用户配置文件。我希望在注册页面中填写用户个人资料的所有字段。这是我要填充的用户配置文件:
class UserProfile(models.Model):
user = models.ForeignKey(get_user_model(), verbose_name='user', on_delete=models.CASCADE)
name = models.CharField(max_length=255, null=True)
contact_number = models.CharField(max_length=11, default="0331232132")
def __str__(self):
return self.name
这是我的自定义用户模型:
class CustomUserManager(BaseUserManager):
def _create_user(self, email, password, **kwargs):
if not email:
raise ValueError("The given email must be set")
email = self.normalize_email(email)
user = self.model(email=email, **kwargs)
user.set_password(password)
user.save(using=self._db)
return user
def create_user(self, email, password=None, **kwargs):
kwargs.setdefault("is_staff", False)
kwargs.setdefault("is_superuser", False)
return self._create_user(email, password, **kwargs)
def create_superuser(self, email, password=None, **kwargs):
kwargs.setdefault("is_staff", True)
kwargs.setdefault("is_superuser", True)
if kwargs.get('is_staff') is not True:
raise ValueError('Superuser must have is_staff=True.')
if kwargs.get('is_superuser') is not True:
raise ValueError('Superuser must have is_superuser=True.')
return self._create_user(email, password, **kwargs)
class User(AbstractUser):
username = None
email = models.EmailField(_("email address"), unique=True)
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = []
objects = CustomUserManager()
这是我发送到模板的用户创建表单:
class CustomUserCreationForm(UserCreationForm):
password2 = forms.CharField(
label=_("Confirm Password"),
widget=forms.PasswordInput,
)
name = forms.CharField()
contact_number = forms.CharField(
max_length=11
)
class Meta:
model = get_user_model()
fields = ['email']
我不确定它是否相关,但这是我的自定义电子邮件后端。
class EmailBackend(ModelBackend):
def authenticate(self, request, username=None, password=None, **kwargs):
try:
user = User.objects.get(email__iexact=username)
except User.DoesNotExist:
return None
except User.MultipleObjectsReturned:
return User.objects.filter(email=username).order_by('id').first()
else:
if user.check_password(password) and self.user_can_authenticate(user):
return user
def get_user(self, user_id):
try:
user = User.objects.get(pk=user_id)
except User.DoesNotExist:
return None
return user if self.user_can_authenticate(user) else None
现在我想要的是当用户提交用户创建表单时,电子邮件和密码字段用于创建用户帐户,而姓名和联系号码以及新创建的用户对象用于使用信号创建用户配置文件实例。到目前为止,我看到的所有示例都只处理在配置文件中设置用户对象。
解决方案
推荐阅读
- javascript - FbPlayableAd.onCTAClick() 尚未激活。点击 CTA 确保成功原生重定向到应用商店
- xml - PowerShell CreateSignificantWhitespace
- windows - 无法设置变量“USER.user_false_counter”,因为 ModSecurity 日志 Apache(Windows 操作系统)中不存在该集合
- java - 文件目录无法从 apache camel 上传 azure blob 上的文件
- elasticsearch - 弹性搜索 6.2 按查询分组
- angular - ng-bootstrap 可排序表,是否可以使用默认列对表进行排序?
- sql - 被引用表中没有与外键中的引用列列表匹配的主键或候选键
- javascript - 警告:找不到密钥模拟器的依赖包!警告:无法计算完整的依赖项列表
- excel - 启用宏后,Excel VBA 找不到项目或库
- angular - 在角度通用中未发现管道错误