1

我正在尝试构建一个相当简单的查询集,它根据相关表中的一组标准返回值列表。根据来自 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)
4

2 回答 2

2

当 Django 替换内容以应用查询过滤器时,这似乎是一种奇怪的行为。

也许值得尝试一下:

位置 = [u'\'旧金山\'', u'\'纽约\'']

于 2012-12-27T13:35:26.327 回答
0

不幸的是,这是Django 查询集属性的一个已知限制。queryDjango 开发人员仅提供用于调试,并且拒绝修改它以反映实际的数据库后端,因此它不会正确地正确转义某些数据类型。

于 2022-01-20T02:43:51.603 回答