2012-12-27 25 views
0

我試圖構造一個相當簡單的查詢集,它返回基於相關表中的一組條件的值列表。根據來自URL參數的值,將值數組傳遞給查詢集上的in篩選器。Django的queryset沒有轉義的文本在...在查詢

問題是,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子句中的每個語句用sin谷歌報價(不是雙引號),它工作正常。

有關爲什麼會發生這種情況以及我如何修復它的任何想法?

對於它的價值,這裏有款的有關部分

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) 
+2

什麼錯誤你好嗎?你如何檢查SQL? django.db.connection.queries不包含轉義參數,它僅用於調試。 –

+0

啊,我基於'companies.queries'重複檢查了PGAdmin中的查詢 - 也許我的數據有問題... – tchaymore

回答

1

似乎是一個奇怪的行爲時,Django的替代內容應用查詢過濾器。

也許這一點,實在值得嘗試這樣的:

位置= [U '\' 舊金山\ '',U '\' 紐約\ '']

相關問題