Django操作Person表报__str__ returned non-string (type NoneType)错误求助
Django录入Person表时报错
__str__ returned non-string (type NoneType) 解决方案 错误核心原因
- 模型
__str__方法返回的字段设置了null=True,当字段未填写值为None时,触发类型不匹配错误 - 视图逻辑存在错误,错误导入模型类代替表单类,且未处理POST提交逻辑,导致实例化模型对象时触发
__str__调用报错
具体修复步骤
1. 修正模型__str__方法
修改两个模型的__str__方法,为空时返回默认字符串,避免返回None:
from django.db import models class Person(models.Model): PersonID=models.CharField(max_length=30,null=True) Lastname=models.CharField(max_length=30,null=True) Middlename=models.CharField(max_length=30,null=True) Firstname=models.CharField(max_length=30,null=True) Initials=models.CharField(max_length=10,null=True) Title=models.CharField(max_length=10,null=True) Gender=models.CharField(max_length=10,null=True) Birthdate=models.DateField(default=None,null=True) def __str__(self): return self.PersonID if self.PersonID else "未设置人员ID" class Function(models.Model): FunctionCode=models.CharField(max_length=30,null=True) FunctionName=models.CharField(max_length=30,null=True) MinSalary=models.IntegerField(null=True) MaxSalary=models.IntegerField(null=True) DefaultBillingRate=models.CharField(max_length=30,null=True) def __str__(self): return self.FunctionCode if self.FunctionCode else "未设置职能编码"
如果业务规则要求PersonID、FunctionCode为必填项,建议直接删除字段的null=True参数,从根源避免空值问题。
2. 修正视图代码
你当前视图错误导入了Person模型类代替表单类PersonForm,且未添加POST请求处理逻辑,修改后代码如下:
from django.shortcuts import render, redirect from .forms import PersonForm from .models import * def createPerson(request): if request.method == "POST": form = PersonForm(request.POST) if form.is_valid(): form.save() # 可根据自己的业务需求修改提交成功后的跳转地址 return redirect("createPerson") else: form = PersonForm() context = {'form':form} return render(request, 'create_person.html', context )
3. 核对模板文件配置
确认模板文件名和视图中render方法传入的文件名一致,如果你本地保存的模板文件名为person.html,请将视图中render的第二个参数修改为'person.html'。
内容的提问来源于stack exchange,提问作者Kirtiraj Botre
相关产品推荐
相关产品推荐

