You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.18 10:18:05