【问题标题】:Django - __str__ method not working, says name is not definedDjango - __str__ 方法不起作用,说名称未定义
【发布时间】: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,它是 1strongly 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


【解决方案1】:

使用self.get_statement_display() 返回选项的描述。请参阅the docs 了解更多信息。

【讨论】:

    猜你喜欢
    • 2022-09-24
    • 1970-01-01
    • 2016-05-10
    • 2011-08-06
    • 1970-01-01
    • 2011-07-19
    • 1970-01-01
    • 1970-01-01
    • 2022-06-15
    相关资源
    最近更新 更多