Django Query 中的 PostgreSQL 编程错误

Posted

技术标签:

【中文标题】Django Query 中的 PostgreSQL 编程错误【英文标题】:PostgreSQL Programming error in Django Query 【发布时间】:2019-07-15 08:16:48 【问题描述】:

我有一个如下查询,它返回特定学期(学年)中特定学期(学期)中特定班级的所有学生的成绩:

grades = Grade.objects.filter(term='First', student__in_class=1,session=1).order_by('-total')

然后是另一个对成绩进行注释的查询,以获得“总”字段的总和。

grades_ordered = grades.values('student')\
    .annotate(total_mark=Sum('total')) \
    .order_by('-total_mark')

起初一切正常,直到我从使用 SQLite 迁移到 postgreSQL,然后开始出现以下错误。

错误:

function sum(character varying) does not exist
LINE 1: SELECT "sms_grade"."student_id", SUM("sms_grade"."total") AS...
                                         ^
HINT:  No function matches the given name and argument types. You might need to add explicit type casts.

编辑: 这是我的模型

class Grade(models.Model):
    session = models.ForeignKey(Session, on_delete=models.CASCADE)
    term = models.CharField(choices=TERM, max_length=7)
    student = models.ForeignKey(Student, on_delete=models.CASCADE)
    subject = models.ForeignKey(Subject, on_delete=models.CASCADE)
    fca = models.CharField(max_length=10)
    sca = models.CharField(max_length=10)
    exam = models.CharField(max_length=10)
    total = models.CharField(max_length=3, blank=True, null=True)
    grade = models.CharField(choices=GRADE, max_length=1, blank=True, null=True)
    remark = models.CharField(max_length=50, blank=True, null=True)

您能提供的任何帮助将不胜感激。

谢谢

【问题讨论】:

请发布您的模型,看起来total 字段类型可能不支持算术运算。 @mfrackowiak:我编辑了现在包含模型的帖子。 虽然我在回答中肯定有观点,但您也可以检查这个问题***.com/questions/50733159/… 谢谢@mfrackowiak;正如您所说,在我的情况下,total 字段似乎是 CharField,它不支持算术运算 【参考方案1】:

以整数或十进制存储数字,而不是在 text/varchar 字段中

total = models.Integer(max_length=3, blank=True, null=True)

看到这个link

另请阅读this

【讨论】:

以上是关于Django Query 中的 PostgreSQL 编程错误的主要内容,如果未能解决你的问题,请参考以下文章

Django Query 每天将两行中的值聚合为单个结果

Django 模板:在同一模板中访问 query_set 和 non-query_set 结果

Postgresq9.6主从部署

Django通过多对多ORM对象中的多个标签进行过滤

django 2 中的迁移错误; AttributeError:“str”对象没有属性“decode”

全文检索-02 | Django开发