用户未保存到数据库Django

mrwjdhj3  于 2022-12-20  发布在  Go
关注(0)|答案(1)|浏览(197)

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模板时,它不起作用,但如果我在管理面板中这样做,它起作用,我怎么能解决它?

6ljaweal

6ljaweal1#

首先,通常不建议修改django默认的User模型,最好创建一个与用户有OneToOneField关系的Profile模型。
除此之外,你的问题在于你的表单。因为你有avatar,它是一个ImageField,你需要改变你的表单的方式,它可以接受FILES
所以你要做的就是像这样改变你的形态:

<form method="post" action="" enctype="multipart/form-data" >

编写客户端代码时:

  • 当你的表单包含任何<input type="file">元素时,使用multipart/form-data。

为了使您的POST request有效,您还需要在视图上接收您的FILES。这可以通过将您的代码更改为:

if request.method=='POST':
            form=UserCreateForm(request.POST, request.FILES)
            if form.is_valid():
            ....

相关问题