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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 18:25:23