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)。
我可以为此代码做些什么?
答案 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()