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

使用Django-Friendship API实现关注功能异常:始终显示取消关注按钮

Django-Friendship 关注/取消关注按钮显示异常排查

使用Django-Friendship API实现关注/取消关注功能时,页面始终显示「取消关注」按钮,无法根据实际关注状态切换按钮。相关模板代码如下:

{% if user.id not in request.user.following %}
    <a class='btn btn-success' href="{% url 'addFollowing' user.id %}">Follow @{{user.username}} </a>
{% else %}
    <a class='btn btn-danger' href="{% url 'removeFollowing' user.id %}">Unfollow</a>
{% endif %}

问题原因

request.user.following是Django-Friendship提供的管理器对象,并非存储用户ID的列表或集合。直接用user.id not in request.user.following进行判断时,该条件永远返回False,导致模板始终渲染「取消关注」按钮。

解决方案

方案1:在模板中使用管理器的查询方法判断

利用following管理器的filter()和exists()方法直接判断是否已关注目标用户,修改模板逻辑:

{% if not request.user.following.filter(id=user.id).exists %}
    <a class='btn btn-success' href="{% url 'addFollowing' user.id %}">Follow @{{user.username}} </a>
{% else %}
    <a class='btn btn-danger' href="{% url 'removeFollowing' user.id %}">Unfollow</a>
{% endif %}

方案2:在视图中提前计算关注状态

将关注状态的判断逻辑移到视图层,把结果作为上下文变量传递给模板,让模板更简洁:

视图代码示例

from django.shortcuts import render, get_object_or_404
from django.contrib.auth.decorators import login_required
from django.contrib.auth.models import User

@login_required
def user_profile(request, user_id):
    target_user = get_object_or_404(User, id=user_id)
    is_following = request.user.following.filter(id=target_user.id).exists()
    return render(request, 'profile.html', {'user': target_user, 'is_following': is_following})

模板代码修改

{% if not is_following %}
    <a class='btn btn-success' href="{% url 'addFollowing' user.id %}">Follow @{{user.username}} </a>
{% else %}
    <a class='btn btn-danger' href="{% url 'removeFollowing' user.id %}">Unfollow</a>
{% endif %}

额外注意事项

  • 确保访问页面的用户已登录,给相关视图添加@login_required装饰器,避免未认证用户访问时request.user.following报错。
  • 检查addFollowing和removeFollowing视图的逻辑:添加关注需调用request.user.following.add(target_user),取消关注调用request.user.following.remove(target_user),操作完成后要正确重定向回页面,确保页面状态及时更新。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 01:35:25