用PostgreSQL找不到django auth用户

时间:2015-12-04 07:25:12

标签: python django postgresql

from django.contrib.auth.models import User as DjangoUser
class Ward(models.Model):
    user = models.ForeignKey(DjangoUser, related_name='wards')
    group = models.ForeignKey(Group, related_name='wards')

这是我的django模型,我使用这个过滤器。

Group.objects.filter(wards__user=_user).all()

我在sqlite3中使用了这段代码,效果很好。

但是,它在PostgreSQL中不起作用。

  

运算符不存在:字符变化=整数   第1行:... rchive_ward“。”group_id“)WHERE”archive_ward“。”user_id“= 1

我认为它是由user_id表中的archive_ward字段引起的。 我发现这个字段的数据类型是character.varying(20)。

我可以为此代码做些什么?

2 个答案:

答案 0 :(得分:4)

尝试删除数据库中的用户表并重新添加。

从头开始创建一个新的。再次同步数据库将有效..

或者您可以这样做:raw_query

您无法将整数与varchar进行比较。 PostgreSQL是严格的,不会为你做任何魔术类型转换。我猜测SQLServer会自动进行类型转换(这是一件坏事)。

如果你想比较这两种不同的野兽,你必须使用强制语法 ::

将其中一种投射到另一种。

答案 1 :(得分:0)

Postgres错误意味着您要将整数与字符串进行比较:

operator does not exist: character varying = integer

您可以更改数据库模型,以使user_id为整数类型。或者你可以在Python中将整数转换为字符串:

Group.objects.filter(wards__user=str(_user)).all()