【发布时间】:2012-12-27 07:24:15
【问题描述】:
我正在尝试构建一个相当简单的查询集,它根据相关表中的一组条件返回值列表。根据 URL 参数中的值,将一组值传递给查询集上的 in 过滤器。
问题是 Django 将这些值作为文本不带引号传递到 SQL 查询中,因此查询失败。
焦点表包含有关公司(“实体”)的信息以及有关这些公司办公室(“办公室”)的相关表信息。
这是传递给查询集的值数组:
locations = [u'San Francisco', u'New York']
这是查询:
companies = Entity.objects.values("name","summary").filter(office__city__in=locations)
这是实际命中 SQL 的查询:
SELECT "entities_entity"."name", "entities_entity"."summary" FROM "entities_entity" INNER JOIN "entities_office" ON ("entities_entity"."id" = "entities_office"."entity_id") WHERE "entities_office"."city" IN (San Francisco, New York)
如果我手动运行 SQL 查询,但将 IN 子句中的每个语句用单引号(而不是双引号)括起来,它就可以正常工作。
关于为什么会发生这种情况以及如何解决它的任何想法?
对于它的价值,这里是模型的相关部分
class Entity(models.Model):
name = models.CharField(max_length=450)
summary = models.TextField(blank=True,null=True)
class Office(models.Model):
entity = models.ForeignKey(Entity)
city = models.CharField(max_length=250,blank=True,null=True)
【问题讨论】:
-
您遇到什么错误?你是如何检查 SQL 的? django.db.connection.queries 不包含转义参数,仅用于调试。
-
啊,我根据
companies.queries仔细检查了PGAdmin 中的查询——也许我的数据有问题...
标签: django postgresql django-queryset postgresql-9.1