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

如何在Django中按可用状态及子表颜色数量对产品查询排序?

问题解决:按available状态和关联颜色数量排序Product模型

问题背景

现有Product与ProductColor模型关联(ProductColor通过外键关联Product,related_name为colors),需求是:

  • 先按Product的available字段降序排序(可用产品在前)
  • 再按每个产品关联的颜色数量从多到少排序

之前的尝试未实现需求,以下是正确解决方案:

解决方案

1. 统计所有关联颜色数量

如果需求是统计产品关联的所有颜色条目数量(不管颜色的quantity是否为0),直接用Count注解统计colors关联的记录数,再按指定规则排序:

from django.db.models import Count

# 先注解颜色数量,再排序
products = Product.objects.annotate(
    color_count=Count('colors')
).order_by('-available', '-color_count')

2. 统计有库存的颜色数量

如果需求是只统计**quantity>0的有效颜色数量**,需要给Count添加过滤条件:

from django.db.models import Count, Q

products = Product.objects.annotate(
    color_count=Count('colors', filter=Q(colors__quantity__gt=0))
).order_by('-available', '-color_count')

原代码问题说明

你之前的代码用Case/When注解的是has_zero_quantity,这是在判断是否存在库存为0的颜色,和统计颜色总数的需求不符,所以无法实现按颜色数量排序的目标。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 21:03:16