[英]I am trying to implement blog app with Django.I created registration form with profile pic upload.But its returning IntegrityError
I am trying to implement blog app with Django.I created registration form with profile pic upload.But its returning integrity error null value in column "user_id" violates not-null constraint DETAIL: Failing row contains (7, pics/P_Wk6m1b3.png, null). 我正在尝试使用Django实现博客应用。我创建了带有个人资料图片上传的注册表单。但其在“ user_id”列中返回的完整性错误null值违反了非空约束DETAIL:失败行包含(7,pics / P_Wk6m1b3.png,空值)。
#models.py
class Profile(models.Model):
user = models.OneToOneField(User,on_delete=models.CASCADE)
image = models.ImageField(default='default.jpg',upload_to='pics')
#views.py
def register(request):
if request.method == "POST":
form = Register(request.POST,request.FILES)
if form.is_valid():
profile = Profile()
email = form.cleaned_data['Email']
User_name=form.cleaned_data['Username']
Password=form.cleaned_data['Password']
Confirm_Password=form.cleaned_data['Confirm_Password']
firstname=form.cleaned_data['Firstname']
user=User.objects.create_user(username=User_name,
password=Password,email=email,first_name=firstname)
user.save();
insert = Profile(image = request.FILES['picture'],
user_id=request.user.id)
insert.save()
return redirect('/')
else:
form = Register()
return render(request,'register.html',{'form': form})
#forms.py
class Register(forms.Form):
Email = forms.EmailField(widget=forms.TextInput(attrs=
{"class":"inputvalues"}))
Username = forms.CharField(widget=forms.TextInput(attrs=
{"class":"inputvalues"}))
Password = forms.CharField(widget=forms.PasswordInput(attrs=
({"class":"inputvalues"})))
Firstname = forms.CharField(widget=forms.TextInput(attrs=
{"class":"inputvalues"}),max_length=30)
Lastname = forms.CharField(widget=forms.TextInput(attrs=
{"class":"inputvalues"}),max_length=40)
Confirm_Password = forms.CharField
(widget=forms.PasswordInput(attrs=({"class":"inputvalues"})))
Image = forms.ImageField()
def clean_Email(self):
if validate_email(self.cleaned_data['Email']):
raise forms.ValidationError("Email is not in correct format!")
elif User.objects.filter(email = self.cleaned_data['Email'])
.exists():
raise forms.ValidationError("Email aready exist!")
return self.cleaned_data['Email']
def clean_Username(self):
if User.objects.filter(username =
self.cleaned_data['Username']).exists():
raise forms.ValidationError("Username already exist!")
return self.cleaned_data['Username']
def clean_Confirm_Password(self):
pas=self.cleaned_data['Password']
cpas = self.cleaned_data['Confirm_Password']
if pas != cpas:
raise forms.ValidationError("Password and Confirm Password are not
matching!")
else:
if len(pas) < 8:
raise forms.ValidationError("Password should have atleast 8
character")
if pas.isdigit():
raise forms.ValidationError("Password should not all numeric")
<!-------register.html>
{% extends 'layout.html' %}
{% block content %}
<div class="box">
<h2>
<center>Register</center>
</h2><br>
<form action='register' method='POST'>
{% csrf_token %}
<div>
<label class='labe'>Image:</label>
{{ form.Image }}
</div>
<div>
<label class='labe'>First name:</label>
{{ form.Firstname }}
</div>
<div>
<label class='labe'>Last name:</label>
{{ form.Lastname }}
</div>
<div>
<label class='labe'>Email:</label>
{{ form.Email }}
{{ form.Email.errors }}
</div>
<div>
<label class='labe'>Username:</label>
{{ form.Username }}
{{ form.Username.errors }}
</div>
<div>
<label class='labe'>Password:</label>
{{ form.Password }}
</div>
<div>
<label class='labe'>Confirm Password:</label>
{{ form.Confirm_Password }}
{{ form.Confirm_Password.errors }}
</div>
<input type="Submit" id="lg"/><br>
<center><a href="login" >Already have an account.Login here.
</a></center>
</form>
</div>
<div>
{% for message in messages%}
<h1>{{message}}</h1>
{% endfor %}
</div>
{% endblock %}
It returns integrity errorand i want to know what is that 7.It increases one by one if enter data and click on submit each time 它返回完整性错误,我想知道那是什么7.每次输入数据并每次单击提交时,它都会一一增加。
request.user
is the currently logged in user. request.user
是当前登录的用户。 But there isn't a logged-in user, because this is the registration form. 但是没有登录用户,因为这是注册表格。 You need to use the user you just created.
您需要使用刚创建的用户。
user=User.objects.create_user(username=User_name,
password=Password,email=email,first_name=firstname)
insert = Profile(image = request.FILES['picture'],
user=user)
insert.save()
You are creating the user record in register
but using request.user.id which i expect is None since the user hasn't logged in yet. 您正在
register
中创建用户记录,但是使用request.user.id,我希望它是None,因为用户尚未登录。
Instead just pass user directly : 而是直接通过用户:
insert = Profile(image = request.FILES['picture'], user=user)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.