我一直在尝试创建一种在注册时为用户上传个人资料图片的方法。为此,我创建了一个带有文件字段的自定义ModelForm,并将其与UserCreationForm一起显示。但是,它会引发此错误
ValueError at /signup
The UserProfile could not be created because the data didn't validate.
文件:-
models.py
from django.db import models
from django.contrib.auth.models import User
class UserProfile(models.Model):
user=models.OneToOneField(User, on_delete=models.CASCADE)
img=models.FileField(upload_to="profile/")
def __str__(self):
return self.user.username
forms.py
from django import forms
from . models import UserProfile
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm
# Create your models here.
class ImgForm(forms.ModelForm):
class Meta:
model=UserProfile
fields=['img']
urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.signin, name="signin"),
path('signup', views.signup, name="signup"),
path('logout', views.logout, name="logout")
]
views.py
from django.shortcuts import render, redirect
from django.contrib.auth.models import User
from django.contrib import auth
from django.http import HttpResponse
from .forms import ImgForm
from django.contrib.auth.forms import UserCreationForm
# Create your views here.
def signup(request):
if request.method == 'POST':
form=UserCreationForm(request.POST)
imgform=ImgForm(request.POST, request.FILES)
if form.is_valid() and imgform.is_valid():
#looks good
user = form.save()
img=imgform.save()
img.user=user
return redirect('/')
else:
html = "<html><body><script>alert('Invalid form')</script></body></html>"
return HttpResponse(html)
else:
form=UserCreationForm()
imgform=ImgForm()
context={
'form':form,
'imgform':imgform
}
return render(request, "register/signup.html", context)
表单HTML代码(Signup.html)
<div class="card-body">
<h1>Sign Up</h1>
<form action="{% url 'signup' %}" method="POST">
{% csrf_token %}
{{form.as_p}}
{{imgform.as_p}}
<div class="row">
<div class="col-4 text-right">
<input type="submit" class="btn btn-primary" value=" Sign Up " />
</div>
</div>
</form>
</div>
我尝试过的方法:
尝试删除views.py中的imgform有效性检查(已删除imgform.is_valid()
),删除了所有imgform实例和提交的表单,没有任何问题(没有课程图片)。所以我最好的猜测是该错误是由于不正确保存imgform引起的。我自己找不到问题。任何帮助表示赞赏!
谢谢。