2014-09-15 1 views
3

매우 이상한 : Pymongo 쿼리 일반적으로,하지만 Mongoengine 쿼리 아무것도 :일반적으로 Pymongo 쿼리하지만 Mongoengine 쿼리 아무것도

class VkWallPostListView(ListView): 
    model = VkWallPost 
    context_object_name = "vk_list" 

    def get_template_names(self): 
     return ["blog/vk_list.html"] 

    def get_queryset(self): 
     wallposts = VkWallPost.objects 
     if 'all_posts' not in self.request.GET: 
      #wallposts = wallposts.filter(text='S') 
      wallposts = VkWallPost._get_collection().find({"text":'S'}) 
     tag = self.request.GET.get('tag', None) 
     if tag: 
      wallposts = wallposts.filter(tags=tag) 

     return wallposts 

옵션 wallposts = VkWallPost._get_collection().find({"text":'S'}) 객체를 반환하지만, 같은 Mongoengine wallposts = wallposts.filter(text='S')가 작동하지 않습니다 - 빈 결과, 오류없이! more : 나는 다른 컬렉션에 대한 쿼리와 동일한 클래스를 가지고 있습니다. 거기 엔 몽고 엔진이 정상적으로 작동합니다.

+0

VkWallPost가 사용자의 mongoengine 모델 인 경우 VkWallPost.objects (text = 'S')를 사용하여 객체를 필터링 할 수 있습니다. –

+0

@Rajsubit -이 행을 놓친 것일 수도 있습니다. wallposts = VkWallPost.objects - 정확히 동일한 작업이 이미 완료되었습니다. –

답변

1

VkWallPostListView가 mongoengine.Document에서 직접 상속받지 않은 것처럼 보입니다. 필자는 최근 데이터베이스 스키마와 동일한 모델이 기본 Document 클래스가 아닌 다른 클래스에서 상속 받았을 때 쿼리 할 때 아무것도 반환하지 않는 경우도 발생했습니다. 밝혀지면 mongoengine은 _cls이라는 자식 클래스 문서에 숨겨진 필드를 추가하고 쿼리 할 때 자동으로이를 확인합니다. 나는 데이터베이스에 이미 존재 게시물에 의해 조회하려고하면 포스트

class TextHolder(mongoengine.Document): 
    text = mongoengine.StringField() 
    meta = { 'allow_inheritance' : True, 
      'abstract' : True } 

class Post(TextHolder): 
    user = mongoengine.ReferenceField(User) 

내 클래스의 기본 인 클래스 TextHolder이있는 경우

것은, 그들이 가지고되지 않습니다 예를 들어

문서에 _cls 필드가 정의되어 있습니다. 따라서이 표준을 따르지 않는 문서를 쿼리하는 방법은이 작업을 수행하는 것입니다.

Post.objects(user=user_to_query_by, class_check=False) 

이 나에게 모든 가능한 개체 _cls 필드를 무시하고 현재 모델의 클래스 이름의 일치를 확인하지를 줄 것이다.