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

Django查询集中从datetime字典提取日期的问题求助

解决Django QuerySet中提取日期年/月/日的问题

首先得明确:你用values('send_date')得到的是Django QuerySet对象,它本质是一个可迭代的字典集合——哪怕只匹配到一条数据,它也是类似列表的结构,不是单个字典或datetime对象,这就是你之前所有尝试失败的核心原因。

错误原因拆解

  • queryset.strftime(...):strftime()是datetime.date/datetime.datetime对象的方法,QuerySet根本没有这个属性;
  • queryset['send_date']:QuerySet是集合类型,不能像字典那样直接用键索引,得先取出里面的字典元素;
  • queryset.get('send_date'):QuerySet的get()方法是用来获取符合条件的模型实例,不是字典的取值方法;
  • queryset.items():items()是字典的方法,QuerySet没有这个属性,你得遍历QuerySet里的每个字典才能用items()。

正确解决方案

方法1:从values()返回的QuerySet中提取

因为你是按id查询,结果应该只有一条,所以可以用first()取出QuerySet里的唯一字典,再提取日期对象:

queryset = MyModel.objects.filter(id=id).values('send_date')
# 获取第一个(也是唯一的)字典
date_item = queryset.first()
if date_item:  # 避免查询结果为空的情况
    send_date = date_item['send_date']
    # 直接提取年、月、日属性
    year = send_date.year
    month = send_date.month
    day = send_date.day
    print(year, month, day)  # 输出:2020 9 30

方法2:直接获取模型实例(更直观)

如果你的需求只是提取单个实例的send_date字段,其实没必要用values(),直接用get()获取模型实例再取属性更简单:

try:
    my_model = MyModel.objects.get(id=id)
    send_date = my_model.send_date
    year = send_date.year
    month = send_date.month
    day = send_date.day
except MyModel.DoesNotExist:
    # 处理id不存在的情况
    print("该记录不存在")

两种方法都能轻松拿到你需要的2020、9、30,推荐第二种,代码更简洁且可读性更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 12:47:43