Python 使用Avg进行注释在sqlite中有效,但在postgresql中无效

Python 使用Avg进行注释在sqlite中有效,但在postgresql中无效,python,django,postgresql,sqlite,django-orm,Python,Django,Postgresql,Sqlite,Django Orm,我有一个这样的模型: class Review(models.Model): RATING_CHOICES = ( ('1', 'One Star - I can\'t recommend it'), ('2', 'Two Star - It was okay'), ('3', 'Three Star - I liked it'), ('4', 'Four Star - I liked it!'), ('5'

我有一个这样的模型:

class Review(models.Model):
    RATING_CHOICES = (
        ('1', 'One Star - I can\'t recommend it'),
        ('2', 'Two Star - It was okay'),
        ('3', 'Three Star - I liked it'),
        ('4', 'Four Star - I liked it!'),
        ('5', 'Five Star - I loved it! New favorite!'),
        )
    rating = models.CharField(max_length=10, choices=RATING_CHOICES, blank=False)
    media_object = models.ForeignKey(MediaObject)
    ...
如您所见,一个给定的
MediaObject
可能有许多
评论。我想获得所有
MediaObjects
的查询集,按每个对象的
评论的平均
评级
排序

使用SQLite时,以下查找功能非常有效:

MediaObject.objects.all().annotate(ravg=Avg('review__rating')).order_by('-ravg')
但是,在postgresql上,该查找返回以下错误:

ProgrammingError: function avg(character varying) does not exist
我理解错误,但不理解如何修复/解决它。在这种情况下,在使用Django ORM尝试
Avg
it之前,如何将
rating
转换为一个数字


编辑:我知道理想的解决方案是将这些值存储在
整型字段
中,而不是首先存储在
字符字段
中。然而,这是一个继承的项目,目前这种改变超出了我的权限范围。概述了我认为是解决这个问题的“正确”解决方案—从改变数据存储方式开始。我希望我能做到这一点,如果这是我的个人项目,我会这样处理


假设此字段必须是
CharField
-在使用ORM调用
Avg
之前,是否可以将
Review.rating
中存储的值转换为整数,或者这需要通过?

rating=models来完成。CharField
建议您的
rating
列是字符串,而它应该是整数,为什么您的评级是字符串?。如果要在PostgreSQL上部署,也应该停止在SQLite上开发。是的,这正是问题所在。据我所知,在使用
choices
参数()时,必须使用
CharField
。如果可以将该值最初存储为整数,我也很乐意这样做。能否将
选项
参数与
整型字段
一起使用?如果不是,如何在求平均值之前转换/强制转换为整数?不管开发环境如何,我想了解这在两种DB架构下是如何工作的。我不知道任何Django,但您确定
选项
仅对
CharField
有效吗?
rating=models。CharField
建议您的
rating
列是一个字符串,而它应该是一个整数,为什么你的评级是字符串?。如果要在PostgreSQL上部署,也应该停止在SQLite上开发。是的,这正是问题所在。据我所知,在使用
choices
参数()时,必须使用
CharField
。如果可以将该值最初存储为整数,我也很乐意这样做。能否将
选项
参数与
整型字段
一起使用?如果不是,如何在求平均值之前转换/强制转换为整数?不管开发环境如何,我想了解这在两种DB体系结构下是如何工作的。我不知道任何Django,但您确定
选项
仅对
CharField
有效吗?