Django filter能否传入变量查询?变量传参失效硬编码生效怎么解决
问题根源
你的代码错误地获取了当前登录用户的用户名:member = User.username 取到的是Django内置User模型的字段类对象,不是当前登录用户的实际用户名字符串,因此筛选条件无法匹配到任何数据。硬编码时直接传入了用户名字符串,因此可以正常返回结果。
解决方法
要获取当前登录用户的用户名,需要从请求对象request的user属性中读取,同时建议增加登录校验,避免未登录用户访问时报错。
修正后的代码
# 顶部导入登录校验装饰器(如果你的项目要求登录才能访问该页面) from django.contrib.auth.decorators import login_required @login_required def employeeView(request): # 从当前登录用户实例中取username字段值 member = request.user.username members = Members.objects.filter(username=member) return render(request,'members/user_profile.html', {'members': members})
补充说明
- 如果你的
Members表和内置User表是一一对应的关系,更推荐使用OneToOneField关联两个模型,避免冗余存储用户名字段,后续查询也可以直接通过关联属性读取,不需要手动按username筛选。 - 你可以在视图中加一行
print(member)输出获取到的用户名值,方便调试确认拿到的参数是否符合预期。
内容的提问来源于stack exchange,提问作者Mahesh Babu
相关产品推荐
相关产品推荐

