【问题标题】:__str__(self) in django tutorial returns object instead of textDjango 教程中的 __str__(self) 返回对象而不是文本
【发布时间】:2014-11-28 12:11:14
【问题描述】:

我正在阅读 Django 教程,但在使用 __str__(self) 时遇到问题。

当我在我的模型中添加以下方法时:

def _str_(self):
        return self.question_text

然后运行命令:Question.objects.all()

它返回类似:

<Question: Question object>

但我希望它返回的是实际的问题文本。

【问题讨论】:

  • '_str_' != '__str__'
  • self.question_text 是否是外键字段?

标签: python django python-3.x django-models


【解决方案1】:

问题是如何jonrsharpesays

def _str_(self):
    return self.question_text

应该是

def __str__(self):
    return self.question_text

左侧有两个下划线,右侧有两个下划线

【讨论】:

    【解决方案2】:

    这实际上是一个双重问题。首先,如前所述,__str__ 应使用双下划线。

    第二个问题是在命令行上打印出一个对象不会调用__str__ 方法。相反,它使用__repr__ 方法来获取对象的字符串表示。这与__str__ 方法的不同之处在于它提供了对象的更多技术表示,通常包括类名和一些唯一标识对象的属性(id、内存地址等)。这用于例如在回溯中以更好地识别问题。

    要获取问题文本,您必须通过直接调用或使用str(object) 方法显式调用__str__ 方法。请注意,在模型对象列表上调用str() 将调用列表的__str__ 方法,而这又会在列表中的对象上调用__repr__ 方法。

    【讨论】:

      【解决方案3】:

      这发生在我身上,这是因为在注册添加 str 方法之前需要关闭并重新打开 shell。

      【讨论】:

        【解决方案4】:

        确保在定义模型方法的同一类中编写此方法

        def __str__(self):
        
            return self.question_text
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-01-12
          • 2022-01-24
          • 2021-09-05
          • 2016-05-10
          • 1970-01-01
          • 2021-07-22
          • 2022-12-12
          相关资源
          最近更新 更多