2013-05-19 6 views
4

Mongoengine을 사용하고 태그 클라우드를 형성하려고합니다. 각 항목에 하나 이상의 태그를 첨부하고 싶습니다. 태그와 비슷한 항목이 여기에 사용됩니다 (각 질문 아래에 있음).ListField를 Mongoengine으로 추가 및 업데이트

여기에서 많은 게시물을 검색하고 읽은 후에도 ListField에 새 항목을 추가하거나이를 바꿀 수있는 적절한 방법이 없습니다.

class Item(Document): 
    tags = ListField(StringField(max_length=300)) 

양식을 사용하여 게시 된 결과를 수집하여 하나 이상의 새 태그를 푸시하려고합니다. A의 사용할 수 있습니다 (만 나열하고 튜플

if 'tags' in request.POST and request.POST['tags'] <> '': 
    for Tag in request.POST.getlist('tags'): 
     ItemData.update(push__tags__S__tags=Tag) 

밀어 시도, 실패 : : :

ValidationError (5185505b73ea128e878f4e82 프로필) 내 views.py에서 나는 다음과 같은 검사를 목록 필드 : [ 'tags'])

분명히 잘못된 유형을 사용하고 있지만이 문제를 해결하는 방법은 분실했습니다. [ "시험", "시험"]}

: 이상한 점은 데이터가하지만 기록에 추가됩니다 어떤 이유로 ..

"태그"("테스트"상쾌 브라우저를 게시)이다

게시 된 문자열 (HTML 양식)을 다루는 방법과 HTML을 ListField에 올바르게 밀어 넣는 방법 (그리고이 모든 것을 바꿀 수있는 방법)을 보여줄 수 있습니까?

감사합니다.

답변

6

위치 연산자가 $ 인 것은 mongoengine에 __S__과 같을 필요가 없습니다. 목록에서 위치를 바꾸거나 업데이트하지 않기 때문입니다.

아마 태그를 반복하고 싶지 않으므로 $addToSet을 사용해야합니다. 당신과 같이 mongoengine이 작업을 수행 할 수 있습니다

ItemData.update(add_to_set__tags=['tag1', 'tag2']) 

자동으로 $each와 함께 $addToSet로 변환됩니다 add_to_set에 목록에 전달.

+0

감사합니다. 로스. 그것은 여전히 ​​ValidationError (목록과 튜플 만)를 남긴다. 양식 게시물에서 데이터를받을 때 올바른 형식을 어떻게 입력 할 수 있습니까? – user2391564

+0

게시물 데이터를 목록 또는 튜플로 변환합니다. – Ross

+0

예제를 통해서도 유효성 검사 오류가 발생합니다. x = request.POST.getlist ('tags')를 사용하면 목록을 제공해야하며 같은 오류가 발생합니다. 몇 시간 동안 인터넷 검색을하다가 나눠봤을 때, 나는 정말로 그 원인을 볼 수 없다. 그때까지 나는 0.8.0RC1에서 0.8.0RC4로 업그레이드했지만 해결하지는 못했다. 추가 포인트는 정말 감사하겠습니다! 몽고인 사랑하지만, 학습 곡선은 나를 조금 뒤로 잡고있다 :) – user2391564