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

Django REST中按Category标题过滤Product数据报错的解决方法

这个错误的核心原因是你的Product和Category模型并非直接通过外键关联,而是借助了CategoryAssin这个中间模型实现的多对多关系,所以直接用category__title这种链式查询是行不通的——ORM没法直接识别这种跨中间表的字段关联。

下面给你两种可行的修复方案,你可以根据自己的模型结构选择:

方案一:通过中间模型的关联字段查询

假设你的模型定义符合多对多+中间表的典型结构:

class Category(models.Model):
    title = models.CharField(max_length=100)

class CategoryAssin(models.Model):
    product = models.ForeignKey(Product, on_delete=models.CASCADE)
    category = models.ForeignKey(Category, on_delete=models.CASCADE)
    # 可能包含其他自定义字段,比如关联时间、排序值等

class Product(models.Model):
    # 产品自身字段...
    categories = models.ManyToManyField(Category, through=CategoryAssin)

你可以通过中间模型的小写名称(categoryassin)来关联到Category的title字段,修改后的查询代码如下:

def get(self,request):
    # 通过中间表关联查询,同时限制返回前10条数据
    obj = Product.objects.filter(categoryassin__category__title = "develop")[:10]
    serializer = ProductSerializer(instance=obj,many=True,context={'request': request})
    return Response(serializer.data)

方案二:先定位目标分类再反向查询产品

这种方式更直观,先找到标题为"develop"的分类对象,再反向获取关联的产品:

def get(self,request):
    try:
        # 先获取目标分类实例
        develop_category = Category.objects.get(title="develop")
        # 反向查询关联的Product,取前10条
        obj = develop_category.product_set.all()[:10]
    except Category.DoesNotExist:
        # 如果分类不存在,返回空数据或404状态
        return Response([], status=status.HTTP_404_NOT_FOUND)
    serializer = ProductSerializer(instance=obj,many=True,context={'request': request})
    return Response(serializer.data)

额外提醒:别忘了加上[:10]来限制返回10条数据,你原来的代码里没有做这个限制哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 10:09:31