You need to enable JavaScript to run this app. 如何修复Django serializers字段必填校验报错问题
优惠活动
大模型
产品
解决方案
定价
更多

如何修复Django serializers字段必填校验报错问题

问题修复方案

你遇到的所有必填字段同时提示缺失的问题,90%以上是请求格式不匹配导致,同时代码中存在多个逻辑错误会导致后续运行失败,按以下步骤修复即可:


1. 优先检查请求发送配置

  • 如果你用接口测试工具(Postman、Apifox等)测试:
    • 确认请求方法为POST,地址匹配register_user/
    • 请求Body选择raw格式,子类型选择JSON,不要使用form-data/x-www-form-urlencoded格式(除非你单独配置了DRF的表单解析器)
    • 检查请求头中自动携带了Content-Type: application/json
    • 确认请求体中的字段名和序列化器定义的字段完全一致(大小写敏感),示例请求体参考:
    {
      "user_name": "testuser",
      "email": "test@example.com",
      "company": "test company",
      "state": "test state",
      "city": "test city",
      "address": "test address",
      "phone_number": "13800000000",
      "password": "testpass123",
      "password_2": "testpass123",
      "license_number": "test123"
    }
    
  • 如果你是用前端代码发请求:
    • 确认请求头显式设置了Content-Type: application/json
    • 确认提交的数据是JSON序列化后的字符串,不是FormData对象

2. 修复代码中的逻辑错误

2.1 修复序列化器密码校验错误

当前你把password_2的取值写错成了取password的值,永远不会触发密码不一致的校验,修改serializers.py中的对应代码:

# 错误写法
password = self.validated_data["password"]
password_2 = self.validated_data["password"]

# 正确写法
password = self.validated_data["password"]
password_2 = self.validated_data["password_2"]

2.2 处理license_number字段缺失问题

你的UserBase模型中定义的license_number字段没有设置null=True和blank=True,默认是必填字段,但序列化器的fields列表中没有包含该字段,会导致模型保存时报错,二选一修复:

  • 若注册时需要用户提交许可证号:把'license_number'添加到序列化器的fields列表中
  • 若注册时不需要用户提交:修改models.py中license_number字段定义为:
    license_number = models.CharField(max_length=50, blank=True, null=True)
    

2.3 修复序列化器重复字段

你的序列化器fields列表中重复写了两次first_name,删掉多余的一个即可。

2.4 修复模型Meta类语法错误

UserBase的Meta类中verbose_name用了冒号赋值,修改为等号:

class Meta:
    verbose_name = 'Accounts'
    verbose_name_plural = 'Accounts'

内容的提问来源于stack exchange,提问作者C-Bizz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 13:45:03