2013-09-21 2 views
0

나는 다음 쿼리취급 DB 쿼리 및 필터링 장고 및 유니 코드

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

으로 필터링하고있어하지만 유니 코드 문자열을 사용하는 경우가 작동하지 않습니다. 설명하겠습니다. 표에서 데이터 필드는 예를 들어 [u'_M', u'_F']으로 저장됩니다. 그리고 다른 레코드의 행과 필드를 가져 오는 것은 예를 들어 [u'_M '] 일 수 있습니다. 이 텍스트를 제거하면 (즉, []을 (를) 제거하고 표시하면 u'_M '이 표시되고 필터에서 Gender1을 사용합니다. 이제는 이것이 효과가없는 것 같습니다. 하지만 필터에 '_M'을 하드 코딩하면 작동합니다. 나는 무슨 일이 벌어지고 있는지 이해하지 못합니다. 암묵적인 전환이 진행되고 있습니까?

나는이 여기 목적으로하지만

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

가 BTW 내가 단순화 쿼리 작업 표시 Gender1 = GenderField.split()[0].strip('[],')

에서 Gender1를 얻을. 그것은 인코딩 문제가있는 것 같습니다. 이 작업을 훌륭하고 강력하게 수행하는 가장 좋은 방법은 무엇입니까?

+0

첫 번째 쿼리의 SQL 덤프를 게시 할 수 있습니까? – mariodev

답변

0

데이터를 목록의 파이썬 표현으로 만든 문자열로 저장합니다. 이것은 매우 나쁜 생각입니다. 즉, u 문자와 개폐 따옴표가되고있다 -

즉각적인 문제는 당신이 한번도 문자열"u'_M'""u'_F'"이 무엇인지 당신이 남아있는 쉼표에 [ 문자 분할을 제거한다는 것입니다 문자열의 일부로 저장됩니다. 따라서 이것은 "유니 코드 문자열"이 아니라 단순히 u 앞에 따옴표가 포함 된 문자열입니다.

대신 JSON으로 텍스트를 저장할 수 있습니다. 장고의 JSONFields를 둘러싼 여러 가지 구현이 있습니다. 장고는 데이터를 직렬화 및 비 직렬화합니다.

+0

감사합니다. 데이터를 정리 한 후에 저장하기 전에 목록을 구문 분석하는 저렴하고 간단한 방법이 있습니까? 나는 궁극적 인 플랫폼이 무엇인지 (예 : Google App Engine이 될지) 모르기 때문에 Django를 가능한 바닐라로 유지하려고합니다. – disruptive

+0

나는 나의 방법이 그것을하는 정식 방법이라고 생각했다. – disruptive