You need to enable JavaScript to run this app. Django模板中res_person_1_username与user比较恒为False问题排查
优惠活动
大模型
产品
解决方案
定价
更多

Django模板中res_person_1_username与user比较恒为False问题排查

问题原因

你遇到的判断失效问题本质是数据类型不匹配:

  • object.res_person_1_username是你在模型中定义的TextField类型,存储的是纯字符串格式的用户名
  • 模板上下文中的user是Django认证系统生成的User模型实例对象,不是纯字符串
    你看到打印出来的值一致,是因为Django模板输出User实例时,默认调用了实例的__str__方法,绝大多数场景下User类的__str__返回值就是用户的用户名字符串,所以观感上两者值相同,但实际类型完全不一样,直接做相等判断必然返回False。
    而object.author == user能判断成功,说明你的author字段是关联User表的外键字段,object.author本身也是User实例,同类型的模型实例会按主键判断是否相等,逻辑自然成立。
解决方法

临时修复(无需改模型)

直接修改模板中的判断逻辑,取User实例的username属性做字符串对比即可:

{% if object.author == user or object.res_person_1_username == user.username %}

长期优化(推荐)

如果你后续需要频繁对res_person_1做用户关联判断、查询,更推荐调整模型字段类型,改为外键关联User表,避免存冗余的用户名字段,也能避免后续用户名修改后数据不一致的问题:

# models.py 修改后
from django.contrib.auth import get_user_model
User = get_user_model()

# 替换原有res_person_1_username字段
res_person_1 = models.ForeignKey(
    User,
    on_delete=models.SET_NULL,
    blank=True,
    null=True,
    related_name='res_person_1_records'
)

修改后模板判断可以保持和author一致的逻辑:

{% if object.author == user or object.res_person_1 == user %}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 05:36:07