来自django的save()表单不保存在DB中

时间:2014-11-20 08:13:27

标签: python django

我想在数据库中保存用户名,但它不起作用。下面是代码。我创建了一个名为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 %}

我无法确定问题出在哪里。 有人帮忙吗?

1 个答案:

答案 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