Python 1048,”;列';用户id';不能为空";
models.pyPython 1048,”;列';用户id';不能为空";,python,django,forms,django-models,django-views,Python,Django,Forms,Django Models,Django Views,models.py class Profile(models.Model): user = models.OneToOneField(User, on_delete=models.CASCADE) fullname = models.CharField(max_length=30,blank=False,null=False) bio = models.TextField(max_length=500, blank=True) location = models.
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
fullname = models.CharField(max_length=30,blank=False,null=False)
bio = models.TextField(max_length=500, blank=True)
location = models.CharField(max_length=30, blank=True)
birth_date = models.DateField(null=True, blank=True)
gender = models.CharField(max_length=10,blank=True)
def __str__(self):
return self.fullname
forms.py
class UserForm(forms.ModelForm):
username = forms.CharField(widget=forms.TextInput(attrs={'class':'validate','placeholder': 'Enter Username'}))
password= forms.CharField(widget=forms.PasswordInput(attrs={'placeholder':'Enter Password'}))
email=forms.EmailField(widget=forms.TextInput(attrs={'placeholder':'Enter Email'}))
password2 = None
class Meta:
model=User
fields=['username','password','email']
class ProfileForm(forms.ModelForm):
fullname = forms.CharField(widget=forms.TextInput(attrs={'placeholder':'Enter fullname'}))
class Meta:
model=Profile
fields=['fullname']
views.py
def register(request):
if request.method =='POST':
form = UserForm(request.POST)
profile_form = ProfileForm(request.POST)
if form.is_valid() and profile_form.is_valid():
variable=form.save(commit=False)
variable.password = pbkdf2_sha256.encrypt(request.POST['password'],rounds=12000,salt_size=32)
variable.save()
profile=profile_form.save(commit=False)
profile.username=variable.username
profile.save()
username = form.cleaned_data.get('username')
messages.success(request,f'account created for { username }')
return redirect('login')
else:
form = UserForm()
profile_form = ProfileForm()
context={'form':form , 'profile_form':profile_form}
return render(request, 'users/register.html',context)
我创建了两个表auth_user(默认)和users_profile。当我注册用户时,默认数据进入auth表,但全名未插入user_profile。您没有将
配置文件。user
链接到user
对象。您可以通过以下方式执行此操作:
def register(request):
if request.method =='POST':
form = UserForm(request.POST)
profile_form = ProfileForm(request.POST)
if form.is_valid() and profile_form.is_valid():
variable=form.save(commit=False)
variable.set_password(variable.password)
variable.save()
profile=profile_form.save(commit=False)
profile.user = variable
profile.save()
username = form.cleaned_data.get('username')
messages.success(request,f'account created for { username }')
return redirect('login')
# …
def寄存器(请求):
如果request.method==“POST”:
form=UserForm(request.POST)
profile\u form=ProfileForm(request.POST)
如果form.is\u valid()和profile\u form.is\u valid():
变量=form.save(提交=False)
变量.设置密码(变量.密码)
变量save()
profile=profile\u form.save(commit=False)
profile.user=变量
profile.save()
username=form.cleaned\u data.get('username'))
messages.success(请求,f'account created for{username}')
返回重定向('登录')
#…
要设置密码,您最好使用Django的。谢谢!但是我现在无法登录(上面说用户名和密码不正确)。我使用默认登录django@RamPatil:您可能不应该自己加密密码。您可以使用
.set_password
方法。(1062,“键2的重复输入'3')全名不会插入到其他数据库中