Django2.0.1中__str__()方法显示Object而非self.text内容(Python3.5)
解决Django 2.0.1 + Python 3.5中模型__str__方法在Admin显示"Object"的问题
嘿,我之前在Django 2.x搭配Python 3.x开发时也碰到过一模一样的问题,别慌,咱们一步步排查解决:
先检查__str__方法的拼写是否正确
这是最常见的坑!一定要确保方法名是双下划线开头+str+双下划线结尾,也就是__str__,少写一个下划线都会导致Django调用默认的对象字符串表示,显示成"Object"。正确的写法应该是这样:class YourModel(models.Model): text = models.CharField(max_length=200) def __str__(self): return self.text确认模型已正确注册到Admin
打开你的admin.py文件,检查是否已经把目标模型注册到后台管理系统里了,示例代码如下:from django.contrib import admin from .models import YourModel admin.site.register(YourModel)如果没注册,Admin显示的会是默认的模型名称,但如果注册后还是显示"Object",那大概率是__str__方法的问题。
处理text字段为空的情况
如果你的text字段设置了null=True或者blank=True,当某个模型实例的text字段为空时,__str__方法会返回空字符串,这时候Admin就会 fallback 显示"Object"。可以给__str__加个兜底逻辑:def __str__(self): # 如果text不为空就返回text,否则返回带主键的标识 return self.text or f"{self._meta.verbose_name} Object #{self.pk}"重启Django开发服务器
有时候修改了models.py的代码后,开发服务器没有自动重载(虽然通常会,但偶尔会出现缓存的情况),手动重启一下服务器,确保新的__str__方法生效。
按照上面的步骤排查,基本就能解决这个问题啦!
内容的提问来源于stack exchange,提问作者NicetomEetU
相关产品推荐
相关产品推荐

