Django DRF查询endtime为NULL的行报错,求正确视图写法
解决DRF中查询endtime为NULL的行的问题
错误原因
你用endtime='NULL'查询时,Django会把字符串'NULL'当作DateTime类型的值去解析,不符合时间格式规范,因此抛出ValidationError。而直接写未加引号的NULL会被Python当作未定义变量,触发NameError。
正确查询方式
Django ORM中查询数据库层面为NULL的字段,需要用__isnull=True的查询条件,对应模型里设置了null=True的字段。同时注意:
- 用
filter()而非get():get()仅能返回单个对象,若存在多条endtime为NULL的记录会直接报错;filter()返回QuerySet,适配多记录的序列化场景。 - 调整逻辑顺序:先完成数据保存操作,再查询最新的结果,确保返回的是更新后的数据。
修改后的views.py代码
@api_view(['POST', 'GET']) def durationUpdate(request): if request.method == 'POST': serializer = RigstateSerializer(data=request.data) if serializer.is_valid(): serializer.save() # 保存后查询endtime为NULL的所有记录 wherenull = Rigstate.objects.filter(endtime__isnull=True) wherenullserializer = DurationSerializer(wherenull, many=True) return Response(wherenullserializer.data)
补充说明
- 你的
Rigstate模型中endtime = models.DateTimeField(blank=True, null=True)的配置是正确的,已经允许该字段存储NULL值。 - 若业务场景确保只有一条endtime为NULL的记录,可改用
get(endtime__isnull=True),但仍建议优先使用filter避免因数据变化引发的异常。
内容的提问来源于stack exchange,提问作者steden
相关产品推荐
相关产品推荐

