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

Django中request.user与winning_user相等判断失效问题排查

问题分析与解决方法

问题根源

你打印出来的都是"Test2",但两者类型完全不同:

  • request.user 是Django自带的User模型实例对象
  • winning_user 是你存在数据库里的字符串(因为模型里定义的是models.CharField)

对象和字符串直接用==比较,结果必然是False,哪怕它们的字符串表现形式一样。

解决方法

方法一:修改模型(推荐,符合Django最佳实践)

把InactiveListing里的winning_user字段改成关联User模型的外键,这样存储的是用户对象的引用,比较更准确:

from django.contrib.auth.models import User

class InactiveListing(models.Model):
    title = models.CharField(max_length=64)
    description = models.CharField(max_length=512, default="")
    # 改成ForeignKey关联User
    winning_user = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, blank=True)
    winning_price = models.DecimalField(max_digits=6, decimal_places=2, default=0.01)
    
    def __str__(self):
        return self.title

修改模型后,记得执行数据库迁移:

python manage.py makemigrations
python manage.py migrate

视图里的判断可以保持原来的if request.user == winning_user:,因为现在两者都是User对象了。

方法二:临时修复(不修改模型)

如果暂时不想改动模型,直接比较用户的用户名字符串:
把视图里的判断语句改成:

if request.user.username == winning_user:
    print("This is good")
    message = "You have won this listing!"
else:
    print("Not good")

这样就是字符串和字符串比较,就能得到正确的结果了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 23:45:38