Django仅展示当前用户关联消费记录时报需Profile实例错误如何解决
错误原因
Spend模型的user字段外键关联的是自定义的Profile模型,而request.user是Django内置User模型的实例,类型不匹配导致查询校验失败。
解决方案
修改视图的查询集,通过User和Profile的一对一反向关联拿到当前登录用户对应的Profile实例,再作为过滤条件传入即可。
修改后的视图代码如下:
@login_required def costs(request): # 通过request.user.profile拿到对应Profile实例做过滤 filter = CostFilter(request.GET, queryset=Spend.objects.filter(user=request.user.profile)) return render(request, 'users/includes/costs.html', { 'filter': filter })
如果你给Profile和User的一对一关联自定义了related_name参数,把上面代码里的profile替换成你设置的related_name值即可。
可选优化:如果存在部分登录用户未创建对应Profile的场景,可以加判断避免报错
@login_required def costs(request): user_profile = getattr(request.user, 'profile', None) queryset = Spend.objects.none() if user_profile: queryset = Spend.objects.filter(user=user_profile) filter = CostFilter(request.GET, queryset=queryset) return render(request, 'users/includes/costs.html', { 'filter': filter })
内容的提问来源于stack exchange,提问作者ekzzo
相关产品推荐
相关产品推荐

