0

たとえば、オブジェクトの 1 つに次のものが含まれますthis_sub_string

>> repr(this_sub_string)
u'1 \u03bcM rosiglitazone / 0.1% DMSO for 1 hour'`

そのdescription分野で。しかし、objects.all.filter(Q(description__contains=this_sub_string))このようなオブジェクトを検索するために使用すると、結果が返されません。

検索する前に文字列を削除する\u03bcMと、正しい結果が得られます

>>> models.Samples.objects.filter(description__contains=u' rosiglitazone / 0.1% DMSO for 1 hour')
[<Samples: 40171_GSM1199141_CBP CHIP-SEQ, 3T3-L1 DAY7 1H ROSI_Mus musculus>, <Samples: 40172_GSM1199139_RNAPII CHIP-SEQ, 3T3-L1 DAY7 1H ROSI REP2_Mus musculus>, <Samples: [Bad Unicode data]>, <Samples: 40176_GSM\
1199143_INPUT, 3T3-L1 DAY7 1H ROSI_Mus musculus>, <Samples: [Bad Unicode data]>, <Samples: 40180_GSM1199133_MED1 CHIP-SEQ, 3T3-L1 DAY7 1H ROSI_Mus musculus>, <Samples: [Bad Unicode data]>, <Samples: 40185_GSM119\
9137_RNAPII CHIP-SEQ, 3T3-L1 DAY7 1H ROSI REP1_Mus musculus>]

>>> models.Samples.objects.filter(description__contains=u' rosiglitazone / 0.1% DMSO for 1 hour')[0].description
u'{"source name": "3T3-L1 adipocytes (Day 7)", "treatment": "1 \\u03bcM rosiglitazone / 0.1% DMSO for 1 hour", "cell type": "3T3-L1 adipocytes", "chip antibody": "anti-CBP (sc-369; Santa Cruz)"}'

誰かがこれについてアイデアを持っていますか? ありがとう..

4

2 に答える 2

1

dictこの部分は、文字列自体ではなく、この文字列を含む表現またはそのjsonダンプを格納していると思わせます。

>>> models.Samples.objects.filter(description__contains=u' rosiglitazone / 0.1% DMSO for 1 hour')[0].description
u'{"source name": "3T3-L1 adipocytes (Day 7)", "treatment": "1 \\u03bcM rosiglitazone / 0.1% DMSO for 1 hour", "cell type": "3T3-L1 adipocytes", "chip antibody": "anti-CBP (sc-369; Santa Cruz)"}'

この場合、Unicode 文字はデータベースに存在します\u03bcMが、utf-8 文字ではありません

この文字列を使用して検索するには、同じ方法で処理する必要があります ( jsondump またはrepr)

于 2013-10-29T08:41:51.667 に答える
0

この問題を解決するためのハッキングを見つけました

from _json import encode_basestring_ascii as c_encode_basestring_ascii

>>> c_encode_basestring_ascii(a)
'"1 \\u03bcM rosiglitazone / 0.1% DMSO for 1 hour"'

その後、クエリは正しい結果を返すことができます..

于 2013-10-29T08:42:23.103 に答える