英文:
Admin User model
问题
我的管理员用户模型在使用UserCreationForm注册时不会更新新记录。
在视图中,我已经导入了UserCreationForm,并进行了所有的视图编码。我不知道哪里出错了。我还正确地将表单渲染到模板中。但麻烦的部分是在填写表单后。一旦我访问它,它就不会在管理员面板中更新。
// 视图文件:
from django.shortcuts import render
from django.http import HttpResponse
from django.contrib.auth.forms import UserCreationForm
def home(request):
if request.method == "POST":
form = UserCreationForm(request.POST)
if form.is_valid():
form.save()
context = {'form': form}
return render(request, 'main/index.html', context)
// 模板文件:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<form action="" method="POST">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="register">
</form>
</body>
</html>
英文:
My admin user model does not update new record when I register using UserCreationForm.
in the views I have imported Usercreationform has shown below and I did all the views coding. I do not know where I went wrong. I also rendered the form correctly into the template. But the annoying part comes after filling the form. It doesn't update in the admin panel once I accessed it
// View file:
from django.shortcuts import render
from django.http import HttpResponse
from django.contrib.auth.forms import UserCreationForm
def home(request):
if request.method == "POST":
form = UserCreationForm(request.POST)
if form.is_valid():
form.save()
context = {'form':form}
return render(request, 'main/index.html', context)
// Template file:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<form action="" method="POST">
{% csrf_token %}
{{form.as_p}}
<input type="submit" value="register">
</form>
</body>
</html>
答案1
得分: 1
以下是您要翻译的内容:
An excerpt from the docs:
You should always return an
HttpResponseRedirect
after successfully dealing with POST data. This tip isn’t specific to Django; it’s good web development practice in general.
So try the following view:
from django.shortcuts import redirect
def home(request):
if request.method == "POST":
form = UserCreationForm(request.POST)
if form is_valid():
form.save()
return redirect("success_page")
else:
return redirect("some_error_page")
else:
form = UserCreationForm()
return render(request, 'main/index.html', {'form': form})
def success(request):
return render(request, 'main/success.html')
Your urls.py should be:
urlpatterns=[
path('', v.home, name='home')
path('success/', v.success, name='success_page')
]
success.html
<body>
<h1> The form has been successfully submitted. </h1>
<a href="{% url 'home' %}"> Go to homepage </a>
</body>
The same URL pattern and HTML page, you can make for displaying error if the form is not valid.
You can also remove empty action
attribute as Django by default takes the current page route so the template should be like:
<form method="POST">
{% csrf_token %}
{{form.as_p}}
<input type="submit" value="register">
</form>
英文:
An excerpt from the docs:
> You should always return an HttpResponseRedirect
after successfully dealing with POST data. This tip isn’t specific to Django; it’s good web development practice in general.
So try the following view:
from django.shortcuts import redirect
def home(request):
if request.method == "POST":
form = UserCreationForm(request.POST)
if form.is_valid():
form.save()
return redirect("success_page")
else:
return redirect("some_error_page")
else:
form = UserCreationForm()
return render(request, 'main/index.html', {'form':form})
def success(request):
return render(request, 'main/success.html')
Your urls.py should be:
urlpatterns=[
path('', v.home, name='home')
path('success/', v.success, name='success_page')
]
success.html
<body>
<h1> The form has been successfully submitted. </h1>
<a href="{% url 'home' %}"> Go to homepage </a>
</body>
The same URL pattern and HTML page, you can make for displaying error if the form is not valid.
You can also remove empty action
attribute as Django by default takes current page route so the template should be like:
<form method="POST">
{% csrf_token %}
{{form.as_p}}
<input type="submit" value="register">
</form>
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论