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
相关产品推荐
相关产品推荐

