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