2010-03-26 5 views
4

내가하려는 것은 키가 이 아닌 모델의 데이터 저장소를 쿼리하는 것입니다. 이미 가지고있는 객체의 키입니다.. 여기에 몇 가지 코드는 다음과 같습니다키 별 모델 쿼리

class User(db.Model): 
    partner = db.SelfReferenceProperty() 

def text_message(self, msg): 
    user = User.get_or_insert(msg.sender) 

    if not user.partner: 
     # user doesn't have a partner, find them one 
     # BUG: this line returns 'user' himself... :(
     other = db.Query(User).filter('partner =', None).get() 
     if other: 
      # connect users 
     else: 
      # no one to connect to! 

아이디어는 파트너가없는 사람 다른 User, 즉 우리가 이미 알고있는 사용자가 아닌 찾을 수 있습니다.

나는 filter('key !=, user.key()), filter('__key__ !=, user.key()) 및 기타 두 가지를 시도했지만 파트너가없는 다른 User은 반환하지 않습니다. filter('foo !=, user.key())도 레코드에 대해 아무 것도 반환하지 않습니다.

+2

왜 downvote입니까? –

답변

4

정말 쉬운 방법이 있습니다. 두 개의 레코드를 검색하고 사용자 자신의 필터를 필터링합니다.

def text_message(self, msg): 
    user = User.get_or_insert(msg.sender) 

    if not user.partner: 
     # user doesn't have a partner, find them one 
     other = db.Query(User).filter('partner =', None).fetch(2) 
     other = [u for u in other if u.key() != user.key()] 
     if other: 
      # connect user with other[0] 
     else: 
      # no one to connect to! 
+0

나는 이것에 대해 생각해 보았지만 분명히 효과가 있었지만 해킹처럼 보였다. 쿼리에서 키별로 필터링하는 것이 불가능합니까? –

+0

가능합니다. 쿼리가 작동해야합니다. 더 자세한 정보가 없으면 왜 그렇지 않은지 말할 수 없습니다. 그러나! = 쿼리는 실행할 기본 쿼리가 두 개 필요합니다. 결과 집합에서 단일 결과를 제거하기 위해 약간의 둔기가 필요합니다. –

+0

오, 그러면 두 개를 가져 오는 것이 실제로 더 나은가요? 흥미 롭 군. 궁금하다면 여기에 내 코드가 있습니다 : http://gist.github.com/344873 –

관련 문제