Django admin添加Doctor时报__str__返回NoneType错误如何解决
报错根因
你遇到的__str__ returned non-string (type NoneType)错误,本质是模型的__str__方法返回了空值(None),触发场景有两个:
myCustomUser模型的firstName字段允许为null,当关联的用户没有填写firstName时,__str__直接返回self.firstName就是NoneDoctor模型的__str__直接调用self.user.firstName,如果创建Doctor时没有关联用户,或者关联的用户firstName为空,都会返回空值
修复方案
1. 调整myCustomUser的__str__方法
新增兜底逻辑,优先返回姓名,姓名为空时返回必填且唯一的username:
def __str__(self): return self.firstName if self.firstName else self.username
2. 调整Doctor的__str__方法
新增多层判断,避免空值返回:
def __str__(self): # 先判断是否关联了用户 if self.user: # 关联用户的情况下优先返回姓名,姓名为空返回用户名 return self.user.firstName if self.user.firstName else self.user.username # 未关联用户时返回默认字符串 return "未关联用户的医生记录"
注意:修改模型方法不需要执行数据库迁移操作,调整完成后直接重启Django服务即可生效。
可选优化(非必填)
你自定义的myCustomUser继承了Django自带的AbstractUser,AbstractUser本身已经内置了username、password、first_name、last_name、email等字段,你代码里重复定义了同名字段(驼峰和下划线的区别),属于冗余定义,可以删除重复字段减少不必要的存储开销。
内容的提问来源于stack exchange,提问作者Kanchon Gharami
相关产品推荐
相关产品推荐

