【问题标题】:How to fix Django admin page error related to `__str__`如何修复与`__str__`相关的Django管理页面错误
【发布时间】:2021-09-25 09:05:53
【问题描述】:

由于 db 表中有一个空字段 (null=True),管理页面上出现了 None type 错误。遵循herereturn self.author or '' + self.post_title[:40] 的答案并修复了错误。

现在我如何让帖子的作者和标题都出现在管理页面中。以前的(损坏的)代码:return self.author + ', ' + self.post_title[:40],但是一旦我添加了or ''+ 后面的部分就停止工作了。

【问题讨论】:

  • 如果使用return self.author or '' + self.post_title[:40],则解释为return (self.author) or ('' + self.post_title[:40])
  • 其实只返回self.author。我如何让它同时返回?

标签: django django-admin


【解决方案1】:

如果使用return self.author or '' + self.post_title[:40],则解释为

return (self.author) 或 ('' + self.post_title[:40])

这将因此返回self.author,或者如果作者是None(或任何其他具有真实性的值False)与self.post_title[:40]连接的空字符串。

您可以通过以下方式实现此逻辑:

def __str__(self):
    return f'{self.author or ""}, {self.post_title[:40]}'

【讨论】:

  • 是的,这行得通!谢谢!但很好奇:这段代码在models.py。在看到您的回复之前,我开始修改admin.py——那里的更改似乎没有影响管理页面。这段代码应该去哪里?
  • @YCode: 在models.py.
  • __str__ 在models.py 中定义时,admin.py (def __str__(self): return self.title) 中的代码似乎是重复的。我删除了它,没有明显的不良后果。现在我意识到我的 admin.py 和 models.py 有很多重复。是偏好问题还是有最佳实践?
  • @YCode:不,您应该admin.py 中定义__str__ModelAdmin 本身确定模型对象的格式,这是模型类所做的,因此您可以删除那里的__str__
  • 从您的回复中学到和理解了很多东西!非常感谢!
猜你喜欢
  • 2011-07-24
  • 1970-01-01
  • 2011-09-27
  • 2020-01-02
  • 2010-10-26
  • 1970-01-01
  • 2018-04-29
  • 2018-10-14
  • 2017-04-05
相关资源
最近更新 更多