【发布时间】:2017-11-28 18:33:25
【问题描述】:
我定义了以下模型。
class Response(models.Model):
question = models.ForeignKey(Question, on_delete = models.CASCADE)
STATEMENT_CHOICES = (
(-1, "Strongly Disagree"),
(-0.5, "Somewhat Disagree"),
(0, "Uncertain"),
(0.5, "Somewhat Agree"),
(1, "Strongly Agree"),
)
statement = models.DecimalField(
max_digits=2,
decimal_places=1,
choices = STATEMENT_CHOICES
)
def __str__(self):
return self.statement
当我运行 django shell 时,我创建了一个问题 q,上面写着 you like pizza 和响应 r,它是 1 的 strongly agree。然后当我在r 上运行__str__ 方法时,我收到一条错误消息name 'statement' is not defined。
这是确切的控制台输出...
>>> q
<Question: You like pizza.>
>>> r = Response(question=q, statement=1)
>>> r.question
<Question: You like pizza.>
>>> r.statement
1
>>> r
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/Users/TN/Documents/Programming/Django/Practice/myve /lib/python3.5/site-packages/django/db/models/base.py", line 572, in __repr__
u = six.text_type(self)
File "/Users/TN/Documents/Programming/Django/Practice/mysite/personalityQuiz/models.py", line 48, in __str__
return self.statement
NameError: name 'statement' is not defined
【问题讨论】:
-
文件中代码的格式是否有问题?与你在这里写的方式有什么不同吗?我发现你得到一个 NameError 很奇怪,因为你正在访问一个属性,我期望一个 AttributeError。例如,您是否写了
return self,statement,用逗号而不是句号? -
也许您在启动解释器后更改了
models.py?在这种情况下,堆栈跟踪将显示文件系统上的代码,而不是解释器中加载的代码。 -
是的,那一定是在 Erik。谢谢。当然 - 现在我收到另一个错误 "str returned non-string (type int)" ,你知道我如何从元组返回文本而不是数字吗?
标签: python django django-models nameerror