0

次のクエリでフィルタリングしています

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

しかし、ユニコード文字列を使用するとうまくいかないようです。説明させてください。テーブルでは、データ フィールドは次のように格納されます[u'_M', u'_F']。また、別のレコードの行とフィールドを取得すると、たとえば [u'_M'] のようになります。これをテキストに削除すると、つまり [] を削除して表示すると、u'_M' が得られ、これをフィルターで Gender1 として使用します。今、これはうまくいかないようです。ただし、「_M」をフィルターにハードコーディングすると機能します。何が起こっているのかわかりません - ここで何らかの暗黙の変換が行われていますか?

Gender1 を取得しますGender1 = GenderField.split()[0].strip('[],')

ただし、これは機能するようです

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

ところで、ここでの目的のためにクエリを単純化しました。エンコーディングの問題のようです。これをうまく確実に機能させる最善の方法は何ですか?

4

1 に答える 1

0

リストのPython表現から作成された文字列としてデータを保存しています。これは非常に悪い考えです。

当面の問題は、文字を削除[してカンマで分割しても、残っているのは文字列 "u'_M'"であり"u'_F'"、つまり、u文字と開始引用符と終了引用符が文字列の一部として保存されていることです。したがって、これは「Unicode 文字列」ではなく、先頭に引用符が続く単なる文字列ですu

これを行う代わりに、テキストを JSON として保存することもできます。Django には JSONFields のさまざまな実装があり、データのシリアル化と逆シリアル化を処理します。

于 2013-09-21T13:30:12.547 に答える