我正在尝试设置一个 Django 博客应用程序,以使用用户与配置文件模型之间的一对一关系,以便捕获默认 Django 用户模型之外的模式信息。我遇到的问题是我的个人资料模型没有保存,尽管成功注册了用户,但我的个人资料表仍然保持不变。 这是我对发生这种情况的看法:
@transaction.atomic
def profile_new(request):
if request.method == "POST":
user_form = UserForm(request.POST)
profile_form = ProfileForm(request.POST)
if user_form.is_valid() and profile_form.is_valid():
user = user_form.save(commit=False)
profile = profile_form.save(commit=False)
user.username = user.email
user.set_password(user.password)
user.save()
profile.user = user
profile.save()
return redirect('profile_detail', pk=user.pk)
else:
messages.error(request, ('Please correct the error below.'))
else:
user_form = UserForm()
profile_form = ProfileForm()
return render(request, 'accounts/update.html', {
'user_form': user_form,
'profile_form': profile_form
})
非常简单,运行时完全没有错误,只是从未真正保存过 Profile 对象。 表格如下:
from django import forms
from .models import User, Profile
class UserForm(forms.ModelForm):
"""confirm_password = forms.CharField()"""
class Meta:
model = User
fields = ('first_name', 'last_name', 'email', 'password')
class ProfileForm(forms.ModelForm):
class Meta:
model = Profile
fields = ('bio', 'birth_date', 'avatar', 'location')
Profile 的型号:
from django.db import models
from django.contrib.auth.models import User
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True)
bio = models.TextField(max_length=500, blank=True)
avatar = models.ImageField(upload_to = 'avatars/', default = 'avatars/default.jpg')
location = models.CharField(max_length=30, blank=True)
birth_date = models.DateField(null=True, blank=True)
有人知道个人资料无法保存的任何原因吗? 我的第二个问题是:保存和散列该密码的正确方法是什么?我发现我可以在表单中添加一个临时的“确认密码”字段,但我不知道如何散列并保存我得到的密码。
尝试下面的代码:
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, blank=True,null=True)
如果
user
字段为空,我认为您的个人资料表无法保存新记录!
我也遇到了同样的问题,表单信息不会保存在后端,除非手动保存在 django 管理界面,请帮助我们,这对我来说真的很有毒