Django 如何在另一个内置视图(如FormView)中传递UserCreationForm
作为一名初学者,我正在尝试浏览Django文档 为了允许用户注册,我想创建一个注册视图 现在,我已经看到了许多关于如何使用基于函数的视图(通过内置的 我想做的是利用所有的内置视图,所以我想知道是否可以将Django 如何在另一个内置视图(如FormView)中传递UserCreationForm,django,django-forms,Django,Django Forms,作为一名初学者,我正在尝试浏览Django文档 为了允许用户注册,我想创建一个注册视图 现在,我已经看到了许多关于如何使用基于函数的视图(通过内置的 我想做的是利用所有的内置视图,所以我想知道是否可以将UserCreationForm传递到内置的FormView 目前,我已设法在所需的URL上呈现表单,但一旦提交,它就不会创建用户,即使它将我重定向到主页(如需要) 我怎样才能解决这个问题 这是我的观点 from django.shortcuts import render from django
UserCreationForm
传递到内置的FormView
目前,我已设法在所需的URL上呈现表单,但一旦提交,它就不会创建用户,即使它将我重定向到主页(如需要)
我怎样才能解决这个问题
这是我的观点
from django.shortcuts import render
from django.contrib.auth.forms import UserCreationForm
from django.views.generic.edit import FormView
class RegisterView(FormView):
template_name = 'registration/register.html'
form_class = UserCreationForm
success_url = '/home/'
这是我的html
{% block content %}
<form method="post" action="{% url 'home' %}">
{% csrf_token %}
<table>
<tr>
<td>{{ form.username.label_tag }}</td>
<td>{{ form.username }}</td>
</tr>
<tr>
<td>{{ form.password1.label_tag }}</td>
<td>{{ form.password1 }}</td>
<td>{{ form.password2.label_tag }}</td>
<td>{{ form.password2 }}</td>
</tr>
</table>
<input type="submit" value="Register">
</form>
{% endblock %}
@Mirko Oricci 您没有将表单值保存到db。这就是为什么它重定向到success_url而不保存数据 你需要保存它。因此,您应该使用form\u valid方法来保存表单值
from django.shortcuts import render
from django.contrib.auth.forms import UserCreationForm
from django.views.generic.edit import FormView
class RegisterView(FormView):
template_name = 'registration/register.html'
form_class = UserCreationForm
success_url = '/home/'
def form_valid(self, form):
form.save() // form data will be saved
return super(RegisterView, self).form_valid(form)
请更改registration.html表单操作
我已经检查过了,并且我正在管理面板中获得新用户。好的,我已经成功地完成了这项工作 基本上,我的原始代码是正确的,唯一需要更改的是我定义的
RegisterView
继承的模型表单
它不能作为FormView
的子类工作,但必须是CreateView
的子类
如果有人能在有帮助的评论中向我解释原因:)
我找到的答案来自
另外,我必须
撤销成功的URL。谢谢你的回答。我已经尝试过你的解决方案(这是有道理的),但是当我在管理网站上检查,并点击“用户”链接时,新用户不是created@MirkoOricci,我已经编辑了代码,并在最后正确地进行了检查。它起作用了。请检查一下。@Iqbal Hussain,我刚刚复制并粘贴了您编写的所有代码,但是当我签入管理员时,我得到的唯一用户就是管理员本身。我不知道他为什么不工作。设置中可能有什么东西?我不知道…@MirkoOricci,您是否在url.py中创建了路由,是否将表单操作更改为viewmethod,该方法在url.py文件中定义为路由器名称='register'。所以表单操作将是@MirkoOricci,我已经编辑了代码以显示错误消息。现在,您可以确认为什么它不保存。
from django.shortcuts import render
from django.contrib.auth.forms import UserCreationForm
from django.views.generic.edit import FormView
class RegisterView(FormView):
template_name = 'registration/register.html'
form_class = UserCreationForm
success_url = '/home/'
def form_valid(self, form):
form.save() // form data will be saved
return super(RegisterView, self).form_valid(form)
{% block content %}
{% if form.errors %} {% for field in form %} {% for error in field.errors %}
<div class="alert alert-danger">
<strong>{{ error|escape }}</strong>
</div>
{% endfor %} {% endfor %}{% endif %}
<form method="post" action="{% url 'register' %}">
{% csrf_token %}
<table>
<tr>
<td>{{ form.username.label_tag }}</td>
<td>{{ form.username }}</td>
</tr>
<tr>
<td>{{ form.password1.label_tag }}</td>
<td>{{ form.password1 }}</td>
<td>{{ form.password2.label_tag }}</td>
<td>{{ form.password2 }}</td>
</tr>
</table>
<input type="submit" value="Register" />
</form>
{% endblock %}
from django.urls import path, include
from .views import RegisterView
urlpatterns = [
path('', RegisterView.as_view(), name='register')
]