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

如何基于ProductsRating的is_it_good字段排序Products查询集?

问题解决:基于ProductsRating的is_it_good字段排序Products查询集
  • 核心问题:你的Products和ProductsRating模型之间未建立关联,导致Django ORM无法识别productsrating反向关联字段;同时ProductsRating的is_it_good字段验证器参数写反,会导致所有数值都不合法。

  • 第一步:修复模型关联与验证器
    修改models.py中的ProductsRating模型,添加与Products的外键关联,并修正验证器顺序:

from django.core.validators import MaxValueValidator, MinValueValidator

class ProductsRating(models.Model):
    is_it_good = models.IntegerField(validators=[MaxValueValidator(5), MinValueValidator(0)])  # 修正验证器,允许0-5的数值
    whose_rated = models.ForeignKey(CusUser, on_delete=models.CASCADE)
    product = models.ForeignKey(Products, on_delete=models.CASCADE, related_name='productsrating')  # 建立与Products的关联,指定related_name
  • 第二步:执行数据库迁移
    在终端运行命令使模型修改生效:
python manage.py makemigrations
python manage.py migrate
  • 第三步:编写正确的排序查询代码
    通过指定的related_name关联查询集,按最大评分排序:
qs = Products.objects.annotate(
    biggest_rating=Max('productsrating__is_it_good')
).order_by('biggest_rating')
# 若需倒序(最高分在前),使用负号:order_by('-biggest_rating')

如果不想设置related_name,也可以使用Django默认的反向关联名称productsrating_set:

qs = Products.objects.annotate(
    biggest_rating=Max('productsrating_set__is_it_good')
).order_by('biggest_rating')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 14:36:20