2013-09-21 87 views
0

我用下面的查詢處理的數據庫查詢和過濾的Django和Unicode

list = AboutMe.objects.order_by('MyLinkedInLastName').filter(Q(MyGender__contains=Gender1)) 

過濾,但它似乎沒有工作,當我使用Unicode字符串。讓我解釋。在表中,數據字段存儲爲:例如[u'_M', u'_F']。例如,挑選一行和另一個記錄的字段可能是[u'_M']。當我把這個去掉文本 - 即刪除[]並顯示我得到u'_M',我在過濾器中使用它作爲性別1。現在這似乎並不奏效。但如果我硬編碼「_M」到過濾器的作品。我不明白髮生了什麼 - 有沒有進行某種隱式轉換?

我從Gender1 = GenderField.split()[0].strip('[],')

得到Gender1這似乎然而

list = AboutMe.objects.order_by('MyLinkedInLastName').filter(Q(MyGender__contains='_M')) 

BTW我簡化了查詢工作,爲這裏的目的。這似乎是編碼問題。什麼是最好的方式使這項工作做得很好而且有力?

+0

你可以發佈第一個查詢的SQL轉儲嗎? – mariodev

回答

0

您正在將數據存儲爲從列表的Python表示形式創建的字符串。這是一個非常糟糕的主意。

眼前的問題是,即使一旦你刪除[人物和分裂的逗號,你還剩下什麼是"u'_M'""u'_F'" - 也就是u人物和開閉報價正在存儲爲字符串的一部分。因此,這不是您認爲的「Unicode字符串」,而是包含前導u後跟引號的字符串。

而不是這樣做,你可能會將你的文本存儲爲JSON--在Django中有各種各樣的JSONField實現,它們負責爲你的序列化和反序列化數據。

+0

謝謝。清理完數據之後,有沒有一種便宜/簡單的方法來解析列表,然後再保存。由於我不知道最終的平臺會是什麼(即可能是Google App Engine),我非常希望將Django儘可能地保持爲vanilla。 – disruptive

+0

我確實認爲我的方法是這樣做的標準方法。 – disruptive