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

Django如何校验Model中BooleanField字段取值是否为True以判断用户订阅类型

问题修复方案

原代码存在3个核心问题:

  • 错误使用get()方法查询字段值:你当前的写法是查询满足packet_free=当前用户的Account对象,而非获取当前用户对应Account的packet_free布尔字段取值,会直接抛出DoesNotExist异常,就算查询到结果返回的也是Account实例,和True比对永远不成立
  • 未处理边界场景:如果三个布尔字段都不为True,会出现abo变量未定义的报错
  • render方法未传入context:就算abo赋值成功,模板也无法获取到你定义的person和abo变量

修正后的完整代码如下:

@login_required(login_url='home:login')
def profile_view(request):
    # 先获取当前用户关联的Account实例,这里假设Account和User的关联外键字段名为user,请根据你的实际模型定义修改
    user_account = Account.objects.get(user=request.user)
    # 读取三个布尔字段的值判断订阅类型
    if user_account.packet_free:
        abo = "Free"
    elif user_account.packet_premium:
        abo = "Premium"
    elif user_account.packet_business:
        abo = "Business"
    else:
        # 兜底场景,避免变量未定义
        abo = "未订阅"
    
    context= {
        'person': request.user,
        'abo': abo
    }
    # 注意要把context作为第三个参数传入render
    return render(request, 'home/profile.html', context)

修复完成后,你在profile.html模板中直接使用{{ abo }}即可调用输出订阅类型字符串。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 05:51:02