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

如何从Django QuerySet中获取日期值?视图与模板取值问题

解决Django中字典对象无法用属性访问的问题

嘿,我明白你的困扰了!问题出在你用了values()方法——它返回的是由字典组成的QuerySet,而不是Member模型的实例对象。字典是用键来取值的,不是用.访问属性,所以你用.dob自然会报错。下面分两种场景给你解决办法:

一、在视图中获取dob值

方法1:获取模型实例(推荐)

如果你不需要只取特定字段,直接用get_object_or_404获取完整的模型实例是最方便的,这样就能正常用.访问属性了:

from django.shortcuts import get_object_or_404

def updateMemberView(request, id):
    # 找不到对应会员时直接返回404页面,比单纯用get()更安全
    member = get_object_or_404(Member, memberid=id)
    print(member.dob)  # 现在可以正常访问dob属性啦
    return render(request, 'Member/member_update_form.html', {"member": member})

方法2:继续使用values()(如果必须只取特定字段)

如果坚持用values(),那就要用字典的键取值语法:

def updateMemberView(request, id):
    member_queryset = Member.objects.filter(memberid=id).values()
    if member_queryset.exists():
        member_dict = member_queryset.first()
        print(member_dict['dob'])  # 用['dob']代替.dob
        return render(request, 'Member/member_update_form.html', {"member": member_dict})
    # 处理找不到会员的情况
    return HttpResponse("Member not found")

二、在模板中获取dob值

根据你视图传递的内容不同,模板的写法也不一样:

情况1:视图传递的是模型实例(推荐)

直接用属性访问即可,还能搭配日期过滤器格式化输出:

{{ member.dob }}
<!-- 格式化日期示例:YYYY-MM-DD -->
{{ member.dob|date:"Y-m-d" }}

情况2:视图传递的是字典(来自values())

Django模板支持用.访问字典的键,只要你传递的是单个字典(不是QuerySet),直接写:

{{ member.dob }}

如果视图传递的还是QuerySet(比如你原来的代码),那需要先取第一个元素,用first方法:

{{ member.first.dob }}

(不推荐在模板里用索引member.0.dob,因为QuerySet不是列表,这种写法可能会出问题)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 11:37:34