我正在尝试模仿本教程,特别是为用户创建个人资料:https://ruddra.com/posts/django-custom-user-migration-mid-phase-project/
但是,我无法使其正常工作,如何编写视图以将表单输入保存到Profile模型中。从屏幕截图中,您可以看到first_name,last_name等没有从表单输入中保存,即使它们是必填字段。没有任何输入信息的情况下创建用户“ ddkl” get。我尝试输入“ John”,“ Smith”,“ 90210”等,但是从表单中未保存任何内容。编辑:弄清楚节省了核心用户模型的领域。任何想法也要保存在配置文件中。
Django版本== 2.2.3。发现无法使用get_profile(),而是尝试使用信号:@receiver(post_save,sender = User)。
这是我的个人资料模型:
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
key = models.CharField(max_length=25, null=True, blank=True)
first_name = models.CharField(max_length=25)
last_name = models.CharField(max_length=25)
address1 = models.CharField(null=True, max_length=100, blank=True)
address2 = models.CharField(null=True, max_length=100, blank=True, default="")
zipcode = models.CharField(max_length=10, null=True, blank=True,
help_text="zipcode")
state = models.CharField(null=True, max_length=2, blank=True)
email = models.EmailField(max_length = 250, unique=True,
verbose_name = 'email_address')
username = models.CharField(max_length = 25)
password = models.CharField(max_length =25, null=True)
@receiver(post_save, sender=User)
def create_user_profile(sender, omstamce, created, **kwargs):
if created:
Profile.objects.create(user=instance)
def __str__(self):
return f'{self.first_name} ({self.last_name}) ({self.email})'
这是我的views.py。它不起作用,我似乎无法将此模型保存到配置文件中。
def payments(request):
if request.method == "POST":
form = CustomUserCreationForm(request.POST)
if form.is_valid():
profile = form.save(commit=False)
# WHAT SHOULD I DO HERE TO SAVE TO PROFILE MODEL
profile.user = request.user
profile.key = "".join(random.choice(string.digits) for i in range(20))
profile.save()
messages.success(request, f'Your account has been created! Please proceed to agreements and payment.')
return redirect('agreements_page')
else:
form = CustomUserCreationForm(request.POST)
return render(request, 'premium/payments.html', {'form': form})
这是我的表格。py:
Profile = get_user_model()
class CustomUserCreationForm(forms.ModelForm):
class Meta:
model = Profile
fields = ['first_name', 'last_name', 'email', 'zipcode', 'username']
def clean_password(self):
password1 = self.cleaned_data.get('password1')
password2 = self.cleaned_data.get('password2')
if password1 and password2 and password1 != password2:
raise forms.ValidationError("Passwords do not match")
return password2
def save(self, commit=True):
user = super(CustomUserCreationForm, self).save(commit=False)
user.username = self.cleaned_data['username']
user.first_name = self.cleaned_data['first_name']
user.last_name = self.cleaned_data['last_name']
user.zipcode = self.cleaned_data['zipcode']
user.email = self.cleaned_data['email']
user.set_password(self.cleaned_data['password1'])
if commit:
user.save()
return user
基本上,我需要帮助来重写我评论的部分视图。
问题的屏幕截图:无法保存数据,例如电子邮件,名字,姓氏。
编辑:我应该指定类似的型号吗?还是有更好的方法:
Profile.objects.create(user=profile.user, first_name=form.cleaned.data['first_name'],...)