列 "is_superuser" 的类型为整数,但表达式的类型为布尔型 DJANGO 错误



我需要一些帮助。我的python 3.4 Django 1.7.4站点使用sqlite运行良好。现在我已经把它移到了使用Postgres的Heroku。当我试图创建一个用户/密码时,我得到了这个错误:

列"is_superuser"的类型为integer,但表达式的类型为boolean第1行:。。。15-02-08 19:23:26.965870+00:0',"is_superuser"=false,"我们。。。^提示:您需要重写或强制转换表达式。堆栈跟踪中的最后一个函数调用是:/app/.horoku/python/lib/python3.4/site-packages/django/db/backends/utils.py执行中return self.cursor.execute(sql,params)。。。▶本地vars

我无法访问基本的django代码,只能访问我的应用程序上的代码。因此,任何帮助都会非常有帮助。

在我看来,您使用的是原始SQL查询,而不是Django ORM调用,这会在切换数据库引擎时导致可移植性问题。如果你的情况可能的话,我强烈建议你使用ORM。如果没有,那么我认为您需要自己检测数据库引擎,并根据当前引擎构造查询。

在这种情况下,您可以尝试使用0而不是false,我想这应该对SQLite和Postgres都有效。

我在django中执行原始sql查询时遇到了同样的问题,但只使用True|False来强制转换布尔表达式而不是0|1就解决了这个问题。

查询代码块写在下面,它在django中完美地执行。

cursor.execute(
   "insert into userapi_user(email,username,first_name,last_name,mobile_number,password,is_superuser,is_staff,is_active,date_joined)"
    "values(%s,%s,%s,%s,%s,%s,False,False,True,%s)",
    (email, username, first_name, last_name, mobile_number, password, date)
)

问题是由一个变量试图更改迁移文件中的数据类型(即从char字段更改为日期时间)引起的。像PostgreSQL这样的数据库可能不知道如何更改变量类型。

因此,请确保变量在所有迁移中都具有相同的类型。

最新更新