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
相关产品推荐
相关产品推荐

