0

나는반복 속성의 올바른 사용?

class Purchase(db.Model): 
    '''a completed transaction''' 
    item = db.ReferenceProperty(Item, repeated=True)) 

같은 인스턴스 뭔가 많은 항목을 허용 주문/구매는 키워드 법적 반복하고 여기에 올바른 방법으로 사용되어이 필요하세요? 내 다른 옵션은 무엇입니까? 대신 반복되는 stringproperty를 사용해야합니까?

item_ids = model.StringProperty(repeated=True) 또는 반복되는 KeyProperties? 그것은 파이썬리스트처럼 사용

class Purchase(db.Model): 
    items = db.ListProperty(db.Key) 

: 감사

답변

3

거기에 ListProperty입니다 쿼리에서

p = Purchase() 
p.items = [item1.key(), item2.key(), item3.key()] 

그러나 그것은 단일 값 필드처럼 보인다. ListProperty의 모든 값은 별도로 색인화됩니다.

조회는 아래의 item1 포함하는 모든 구매 반환합니다

Purchase.all().filter('items =', item1.key()) 

쿼리 아래에 포함 된 모든 구매를 반환 할 것 중 하나 item1 또는 item2 :

Purchase.all().wilter('items IN', [item1.key(), item2.key()]) 

이 더욱 인덱스에 필요한 경우 하나의 ListProperty가 자신을 exploding-indexes에 익숙시키는 것을 잊지 마십시오.

+4

안녕하세요. :-) 혼란은 NDB와 db 사이에있는 것 같습니다. NDB에서는 repeat = True를 사용하는데, DB에서는 ListProperty를 사용합니다. –

+0

답변과 의견을 보내 주셔서 감사합니다. 내 모델에 가장 자연스러운 것은 반복되는 Keyproperty 일 것이고, NDB가 키와 깨끗한 구문으로 작동하는 방식을 좋아하기 때문에 작동합니다. –

+0

나는'ndb'에 대해서조차 몰랐다. 나는 당신의 코멘트를 대단히 감사합니다! – Ski