views.py
def registerPage(request):
form = UserCreateForm()
if request.method=='POST':
form=UserCreateForm(request.POST)
if form.is_valid():
user=form.save(commit=False)
user.save()
return redirect('home')
return render(request,'base/signup.html',{'form':form})
model.py
class User(AbstractUser):
name = models.CharField(max_length=200,null=True)
email = models.EmailField(unique=True,null=True)
bio=models.TextField(null=True)
avatar = models.ImageField(upload_to='images/',null=True)
USERNAME_FIELD='email'
REQUIRED_FIELDS=['username']
forms.py
class UserCreateForm(UserCreationForm):
class Meta:
model = User
fields = ['name','email','password1','password2','bio','avatar']
html模板
{% include 'main.html' %}
{% block content %}
<div>
<form method="POST">
{% csrf_token %}
{% for field in form %}
{{field.label}}
{{field}}
{% endfor %}
<input type="submit" value="Register" >
</form>
</div>
{% endblock content %}
当我尝试注册HTML模板时,它不起作用,但如果我在管理面板中这样做,它起作用,我怎么能解决它?
1条答案
按热度按时间6ljaweal1#
首先,通常不建议修改django默认的
User
模型,最好创建一个与用户有OneToOneField
关系的Profile
模型。除此之外,你的问题在于你的表单。因为你有
avatar
,它是一个ImageField
,你需要改变你的表单的方式,它可以接受FILES
。所以你要做的就是像这样改变你的形态:
编写客户端代码时:
<input type="file">
元素时,使用multipart/form-data。为了使您的
POST request
有效,您还需要在视图上接收您的FILES
。这可以通过将您的代码更改为: