【问题标题】:I keep getting this error in Django, its called "local variable referenced before assignment"我在 Django 中不断收到这个错误,它被称为“分配前引用的局部变量”
【发布时间】:2021-02-07 13:00:50
【问题描述】:

我正在使用 Django 制作这个待办事项列表网站,但我在 views.py 文件中的“创建”函数中不断收到此错误。这是代码:

def create(response):
    if response.method == "POST":
        form = CreateNewList(response.POST)

        if form.is_valid():
            n = form.cleaned_data["name"]
            t = ToDoList(name=n)
            t.save()

        return HttpResponseRedirect("/%i" %t.id)

这是错误:

local variable 't' referenced before assignment

表格的类别是:

from django import forms


class CreateNewList(forms.Form):
    name = forms.CharField(label="name", max_length=200)
    check = forms.BooleanField()

模型是:

from django.db import models


class ToDoList(models.Model):
    name = models.CharField(max_length=200)

    def __str__(self):
        return self.name


class Item(models.Model):
    todolist = models.ForeignKey(ToDoList, on_delete=models.CASCADE)
    text = models.CharField(max_length=300)
    complete = models.BooleanField()

    def __str__(self):
        return self.text

我尝试在 if 语句之前分配变量。这是代码:

def create(response):
    if response.method == "POST":
        form = CreateNewList(response.POST)
        t = ToDoList.objects
        if form.is_valid():
            n = form.cleaned_data["name"]
            t.create(name=n)
            t.save()

        return HttpResponseRedirect("/%i" %t.id)

    else:
        form = CreateNewList()

    return render(response, "main/create.html", {"form":form})

【问题讨论】:

  • 如果表单无效怎么办
  • 表格是否有效是什么意思?
  • what if -> if form.is_valid(): 返回 false 你希望如何在这一行中设置 t 变量 return HttpResponseRedirect("/%i" %t.id)
  • 是的,什么是 form.is_valid()

标签: python django


【解决方案1】:

如果你想创建t 对象,你需要这样做:

...
t = ToDoList.objects.create(name=n)
t.save()

【讨论】:

【解决方案2】:

问题是t 是在if 子句中定义的,它可能并不总是令人满意,最终会出现错误:local variable 't' referenced before assignment

解决方法可以是在 if 块之前使用一些默认设置(无)创建 t 对象,或者如果您想要的话,缩进 return 语句。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-06
    • 2020-07-29
    • 1970-01-01
    • 2019-09-11
    • 2019-09-10
    • 2018-07-16
    • 2014-08-20
    • 1970-01-01
    相关资源
    最近更新 更多