1

我最近将一个 django 项目从 mysql 迁移到 postgresql,并在此过程中破坏了正在使用的过滤器。旧过滤器如下所示:

return (model_class.objects.filter(status='0',ir=1).count() * 2) +
model_class.objects.filter(status='1',ir=1).count() 

但是,现在会产生一个错误,指出:

 DatabaseError at /report/trip/publication
 operator does not exist: integer = boolean
 LINE 1: ...AND "publication"."ir" = true )
                               ^
 HINT:  No operator matches the given name and argument type(s). 
 You might need to add explicit type casts.

我尝试设置 ir = '1',甚至尝试将其设置为 '3'(为什么不设置?),但无论我将其设置为什么,它都会不断抛出相同的错误消息,这似乎暗示有别的东西正在把它搞砸。我确实将它设置为“返回无”,这给了我一个未经过滤的列表。我能看到的唯一可能的冲突是顶部有一个声明,但这不应该是一个问题(以前不是):

 class Publication(Unit):  
    ir = models.BooleanField(default=False,null=False,verbose_name="Is IR")

我的 postgres 数据库具有以下数据类型的字段:

 status  | character varying
 ir      | integer

不用说,我非常困惑。我没有设置它 - 我只是想修复它(并在此过程中学习一些东西)。过滤这个的正确方法是什么?对于任何反馈,我们都表示感谢。

4

1 回答 1

1

在 Postgres 中,BooleanField 是“布尔”类型。

快速修复是更改 Postgres 中的列。

于 2012-06-15T19:19:47.410 回答