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

Django中如何通过用户ID查询UserProfile内存储的关注用户列表

问题原因

你原来的查询逻辑完全搞反了:
UserProfile.objects.filter(favorites__user__id=user_id) 实际是筛选「自身关注列表里包含id为user_id的用户对应的profile」的所有UserProfile,也就是你查出来的是该用户的粉丝列表,不是你要的关注列表,自然结果不符合预期。


正确写法

写法1(更简洁易读,推荐)

先拿到对应用户的UserProfile实例,直接取关联的关注列表即可:

# 先根据用户ID获取对应的profile,可根据需求用get_object_or_404处理不存在的情况
target_profile = UserProfile.objects.get(user__id=user_id)
# 直接取关注列表
favorites = target_profile.favorites.all()

写法2(单条QuerySet查询)

如果不想分两次查询,可以利用多对多字段的默认反向关联实现:

favorites = UserProfile.objects.filter(userprofile__user__id=user_id)

可读性优化建议

你可以给多对多字段加上related_name,不用记默认反向关联名,代码可读性更高,修改UserProfile模型如下:

class UserProfile(models.Model):
  birth_date = models.DateField(default=datetime.date(1900, 1, 1))
  # related_name对应反向关联:所有关注我的用户profile
  favorites = models.ManyToManyField('self', symmetrical=False, related_name='followed_by')

修改后单条查询可以写成更易懂的形式:

favorites = UserProfile.objects.filter(followed_by__user__id=user_id)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 18:27:04