我想在数据库中保存用户名,但它不起作用。下面是代码。我创建了一个名为User的数据库,我正在尝试保存已经通过我创建的html输入获取的用户。我的数据库用户只包含用户名字段。我使用UserCrationForm作为默认值,我的数据库在phpmyadmin中显示为polls_user。我认为这不是问题所在。当我尝试使用save modelform保存shell时,它正在工作。
views.py
def register_user(request):
if request.method == 'POST':
form = UserCreationForm(request.POST)
if form.is_valid():
q = form.save(commit=False)
q.username = request.username
q.save()
return HttpResponseRedirect('/polls/login')
else:
messages.error(request, "Error")
args = {}
args.update(csrf(request))
args['form'] = UserCreationForm()
return render_to_response('polls/register.html', args, context_instance= RequestContext(request))
register.html
{% block content %}
<h2> Register</h2>
<form action="/polls/login/" method="post">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Register">
</form>
{% endblock %}
我无法确定问题出在哪里。 有人帮忙吗?
答案 0 :(得分:0)
问题在于:q.username = request.username
。应该是:
def register_user(request):
if request.method == 'POST':
form = UserCreationForm(request.POST)
if form.is_valid():
form.save()
q = User() #import your own User model here.
q.username = request.user.username
q.save()
return HttpResponseRedirect('/polls/login')
PS:这只会获取登录用户的用户名。
修改强>
(来自评论)
如您所见,UserCreationForm
是一个模型,在元类中,模型是auth.User模型(检查here)。因此您的数据将保存在auth.User中。因此,像这样覆盖UserCreationForm
(如果你想使用UserCreationForm
):
#form
class MyUserCreationForm(UserCreationForm):
class Meta:
model = PollUser #Your poll user model
fields = ("username",)
#view
if request.method == 'POST':
form = MyUserCreationForm(request.POST)
if form.is_valid():
....
对于此解决方案,您必须记住,您需要从PollUser
模型继承auth.User
模型。如果您想使用自己的PollUser
模型(不是auth.User
模型的子类),那么我建议您为PollUser
制作新的模型表单而不使用UserCreationForm
。