如何解决用户ModelForm未保存到数据库Django
我有一个ModelForm,它创建一个自定义用户(AbstractUser模型)的实例。每当我尝试提交表单时,除了重新加载页面(由于操作)外,什么都不会发生,并且什么也没有保存在数据库中。代码如下:
def sign_up(request):
if request.method == 'POST':
print("test")
form = UserForm(request.POST)
if form.is_valid():
form.save()
data = form.cleaned_data
user = authenticate(
username=data['username'],password=data['password']
)
user_login(request,user)
else:
form = UserForm()
return render(request,'schedules/signup/signup.html',{'form':form})
class ClientUser(AbstractUser):
classes = models.ManyToManyField(ScheduleClass)
personal_changes = models.TextField(name="personal_changes",default="none")
schedule = models.ManyToManyField(Schedule)
def get_classes(self):
return self.classes
class UserForm(forms.ModelForm):
class Meta:
model = ClientUser
fields = ['username','password','classes','schedule']
<form method="post" action="http://127.0.0.1:8000/">
{% csrf_token %}
{{ form }}
<input type="submit">
</form>
由于某种原因,即使我发布,它甚至也不会打印我在sign_up
函数的第3行上写的行。我在做错什么吗?
解决方法
好吧,所以您说您的打印不显示,因此首先在这里使用django的{% url
模板标记相对于网站进行表单操作通常是个好主意,或者只是将其留空以进行发布到当前网址;
<form method="post" action="">
{% csrf_token %}
{{ form }}
<input type="submit">
</form>
现在,如果您使用POST请求访问视图,并且表单无效,那么当页面再次呈现时,您目前正在执行的操作不会包含任何错误,因此,当该页面看上去没有任何反应时实际上,您确实尝试过验证表单,只是没有将错误返回给用户。
调用form.is_valid()
后,如果该实例无效,则会向该form
实例添加错误。因此,表单实例的状态非常重要,您需要将其传递给用户,而不是创建一个新的实例来消除错误。
您会做这样的事情;
def sign_up(request):
# Create the form for a GET request
form = UserForm()
if request.method == 'POST':
# Recreate the form instance with the POST data
form = UserForm(request.POST)
# Run form validation
if form.is_valid():
form.save()
data = form.cleaned_data
user = authenticate(
username=data['username'],password=data['password']
)
user_login(request,user)
# if you end up here on a POST request,the form isn't valid but still contains the errors
return render(request,'schedules/signup/signup.html',{'form':form})
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。