関連テーブルの一連の基準に基づいて値のリストを返す、かなり単純なクエリセットを作成しようとしています。URL パラメーターの値に基づいて、値の配列がクエリセットのin
フィルターに渡されます。
問題は、Django がこれらの値を引用符なしのテキストとして SQL クエリに渡すため、クエリが失敗することです。
フォーカル テーブルには、会社 (「エンティティ」) に関する情報と、それらの会社のオフィス (「オフィス」) に関する関連テーブル情報が含まれています。
これは、queryset に渡される値の配列です。
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)
IN
SQL クエリを手動で実行しても、句内の各ステートメントを (二重引用符ではなく) 一重引用符で囲むと、問題なく動作します。
なぜこれが起こっているのか、どうすれば修正できるのかについて何か考えはありますか?
価値があるのは、モデルの関連部分です
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)