/ basic_app / register /中的AttributeError:'tuple'对象没有属性'get'

时间:2019-09-10 08:05:23

标签: django

我知道这个问题已经问了很多,大多数情况下是由于HttpResponse中的渲染或views.py导致的,我仔细检查了一下,但是代码对我来说看起来不错,不知道在哪里问题是。

这是一个非常基本的Django表单的views.py文件,但我无法正常工作

def register(request):


    registered = False

    if request.method == 'POST':
        user_form = UserForm(data = request.POST)
        profile_form = UserProfileInfoForm(data = request.POST)

        if user_form.is_valid() and profile_form.is_valid():
            user = user_from.save()
            user.set_password(user.password)
            user.save()

            profile = profile_form.save(commit = False)
            profile.user = user

            if 'profile_pic' in request.FILES:
                profile.profile_pic = request.FILES['profile_pic']

            profile.save()
            registered = True

        else:
            return (user_form.errors,profile_form.errors)

    else:
        user_form = UserForm()
        profile_form = UserProfileInfoForm()

    return render(request,'basic_app/register.html',{'user_form': user_form,                                      
                                                  'profile_form':profile_form,
                                                     'registered':registered})

1 个答案:

答案 0 :(得分:1)

您不能return (user_form.errors, profile_form.errors),因为它不是HttpResponse对象。在这种情况下,服务器应返回什么响应。

通常情况下,如果表单无效,服务器将重新呈现内容。如果正确呈现该表单,它将显示错误。

请注意,如果POST请求成功,通常应重定向以实现Post/Redirect/Get pattern [wiki]。您可能还想使用UserCreationForm [Django-doc]。这样将以正确的方式(使用.set_password(..)设置用户密码,并运行密码验证程序(如果已配置)。

因此,您可以按以下方式重写视图,但是您可能应该将UserForm替换为UserCreationForm

from django.shortcuts import redirect

def register(request):
    if request.method == 'POST':
        user_form = UserForm(data=request.POST)
        profile_form = UserProfileInfoForm(data=request.POST)
        if user_form.is_valid() and profile_form.is_valid():
            user = user_from.save(commit=False)
            user.set_password(user.password)
            user.save()
            profile = profile_form.save(commit=False)
            profile.user = user

            if 'profile_pic' in request.FILES:
                profile.profile_pic = request.FILES['profile_pic']

            profile.save()
            return redirect('name-of-view')
    else:
        user_form = UserForm()
        profile_form = UserProfileInfoForm()

    return render(
        request,
        'basic_app/register.html',
        {'user_form': user_form, 'profile_form':profile_form })