基于反向外键中字段平均值的Django过滤器

Django filter based on average of a field in reverse foreignkey

我有 2 个 类、产品和评级。

class Product(models.Model):
    type = models.CharField(max_length=20)
    name = models.CharField(max_length=50)
    description = models.TextField(blank=True, null=True)
    image = models.ImageField(upload_to = 'img/', default = 'img/no-img.png')
    slug = models.SlugField(unique=True, default = (randint(0,1000000)))

    def get_avg_rating(self):
        avg_rating = self.rate_set.all().aggregate(Avg('rating'))
        if avg_rating['rating__avg']:
            return round(avg_rating['rating__avg'],1)
        else:
            return 0

class Rate(models.Model):
    user = models.ForeignKey(User)
    product= models.ForeignKey(Product, blank=True, null=True)
    rating = models.DecimalField(max_digits=2, decimal_places=1, default=Decimal(0.0))

我正在尝试获取两个数字之间的平均收视率,我试过:

Product.objects.filter(name__icontains=search, rate__rating__lte=rating[0], rate__rating__gte=rating[1])

以上没有从数据库中获取任何结果。评级列表的值为 ['0', '6'],我在数据库中有一个平均评级为 2 的对象。该对象没有返回,我也没有得到任何错误。是否可以在数据库级别查询上述内容,或者我应该在 python?

中进行查询

尝试按结果注释平均评分和过滤查询集:

Product.objects.filter(name__icontains=search).annotate(avg_rating=Avg('rate__rating')).filter(avg_rating__lte=rating[0], avg_rating__gte=rating[1])