分配前引用的局部变量''-在视图中使用模型形式

时间:2018-08-05 09:37:24

标签: django

我试图在我的视图中使用该表单,但是检查用户是否已登录或是否根据其更改某些字段。

这是我的 views.py

def PostAd(request):
    if request.user.is_authenticated:
        obj = Account.objects.get(user=request.user)
        if request.method == "POST":
            ad_post_form = AdPostForm(request.POST, request.FILES)
            if ad_post_form.is_valid():
                ad_post_form.created_by = request.user
                if obj.role == 'admin':
                    ad_post_form.is_active = True
                ad_post_form.save()
                return redirect('home')
        else:
            ad_post_form = AdPostForm(request.POST, request.FILES)
    else:
        if request.method == "POST":
            ad_post_form = AdPostForm(request.POST, request.FILES)
            if ad_post_form.is_valid():
                ad_post_form.created_by = 'guest'
                otp_number = random.randint(100000, 999999)
                ad_post_form.otp = otp_number
                ad_post_form.save()
                return redirect('home')

            else:
                ad_post_form = AdPostForm()


    context = {
        'ad_post_form': ad_post_form,
    }

    return render(request, 'pages/post-ad.html', context)

由于某种原因。变量ad_post_form在我找不到的特定步骤中超出范围。所以它给我错误local variable 'ad_post_form' referenced before assignment.

1 个答案:

答案 0 :(得分:2)

如果用户未通过身份验证,并且请求方法不是POST ad_post_form,则不会定义。您只需在视图顶部定义ad_post_form即可解决:

def PostAd(request):
    ad_post_form = AdPostForm()
    if request.user.is_authenticated:
    ...
相关问题