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

使用Django REST Framework发送PUT请求返回200,GET请求中car_year字段为null

问题排查与解决

可能的原因及对应解决方法

1. PUT请求未携带car_year字段

DRF的UpdateModelMixin默认使用全量更新(partial=False),也就是PUT请求必须包含所有必填字段。如果你的模型中car_year没有设置允许为空,但数据库实际允许该字段为null(比如之前迁移时默认设置),那么PUT时没传该字段会导致它被设为null。

  • 解决:
    • 确保Postman发送PUT请求时,请求体里包含car_year字段,且值为有效整数(比如2020)。
    • 如果需要支持部分更新(不需要传所有字段),可以修改视图的put方法,启用部分更新:
      def put(self,request,id=None):
          return self.update(request,id, partial=True)
      
      不过更规范的做法是用PATCH请求来做部分更新,PUT保留全量更新的语义。

2. 模型字段配置问题

你的car_year字段用了IntegerField(max_length=None),但max_length参数对IntegerField完全无效,属于冗余配置。另外,如果允许car_year为空,需要显式配置:

car_year=models.IntegerField(null=True, blank=True)

如果不允许为空,就不要加null=True和blank=True,这样序列化器会强制要求PUT请求携带该字段,否则返回验证错误。

3. 数据库迁移未同步

如果是后来才给Driver模型添加的car_year字段,迁移时如果没有设置默认值或允许null,数据库会拒绝迁移。可能你当时默认允许了null,导致数据库中该字段实际允许为空,所以PUT时没传值就会被设为null。

  • 解决:
    • 确认模型配置和数据库实际字段属性一致,重新执行迁移命令:
      python manage.py makemigrations
      python manage.py migrate
      

4. 模型__str__方法语法错误

你提供的代码里,__str__方法的return语句没有缩进,这会导致语法错误,影响模型的正常使用。修正为:

def __str__(self):
    return self.name

内容的提问来源于stack exchange,提问作者gorge

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 13:00:50