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

如何基于Interests模型将关注当前用户的Django UserProfile置顶排序?

实现UserProfile按Interests条件排序的解决方案

需求:将满足Interests模型中interested_in等于当前登录用户ID的UserProfile实例排在查询列表的最前端。

实现步骤

我们可以利用Django的annotate结合Case/When添加条件标记,再通过排序字段将目标实例前置,所有操作在数据库层面完成,效率更高:

  1. 导入所需的查询工具:
from django.db.models import Case, When, BooleanField
  1. 构建查询集:
current_user = request.user

# 获取所有对当前用户表达兴趣的用户ID集合
interested_user_ids = Interests.objects.filter(interested_in=current_user).values_list('interest_sent_by_id', flat=True)

# 给UserProfile实例添加标记字段,再按标记排序
user_profiles = UserProfile.objects.annotate(
    is_interested=Case(
        # 判断当前UserProfile关联的用户是否在感兴趣列表中
        When(user_model_for_profile_id__in=interested_user_ids, then=True),
        default=False,
        output_field=BooleanField()
    )
).order_by('-is_interested')  # 降序排序,标记为True的实例排在最前

补充说明

  • 如果需要在前置目标实例后,再按其他字段(比如出生日期、创建时间)排序,可以扩展order_by参数,例如:
    .order_by('-is_interested', '-date_of_birth')
    
  • 代码中直接通过外键ID进行匹配,避免了额外的关联查询,提升了查询性能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.01 16:44:52