0

에서 구조화 된 반복 목록의 요소 하나를 제거합니다. 최근에 Google App Engine에서 ext.db에서 NDB로 전환했으며 어려움을 겪고 있습니다. (그리고 나는 OOP를 처음 접했습니다.)GAE NDB

문제점 : 사용자는 좋아하는 과일, 점수 및 설명을 입력 할 수 있으며, 이는 구조화 된 목록에 저장됩니다. 사용자 프로필 페이지에는 과일 이름과 그 옆에있는 "과일 제거"버튼이 표시됩니다.이 버튼을 클릭하면 항목이 목록에서 제거되므로 구조화 된 목록에서 삭제됩니다. 나는 ext.db를 사용하여 목록의 요소를 제거하고 문제를 해결할 수있었습니다. 이것은 내가 ext.db 함께 가지고하는 데 사용되는 것입니다

, 더 "점수"또는 "의견"은 저장되지 :이 데이터베이스에서 사용자 fruitName에 의해 지정된 이름을 제거 할

class UserProfile(db.Model): 
     uid   = db.StringProperty(required=True) 
     password  = db.StringProperty(required=True) 
     firstName  = db.StringProperty(required=True) 
     favFruits  = db.StringListProperty() 

def deleteFruit(self, fruitName): 
    if fruitName in self.favFruits: # <--favFruit is the list of fruit for a user 
     self.favFruits.remove(fruitName) 
     self.put() 
     return OK 
    else: 
     return NOT_FOUND 

.

나는 실제적으로 NDB를 사용 favFruits라는 구조화 된 목록 지금, 말하기, 위의 작업을 수행 할 :

내가 관련된 사용자가 입력 한 fruitName을 삭제 모든 요소를 ​​사용하여 favFruits에 항목을 찾으려면
class FavFruits(ndb.Model): 
    fruit = ndb.StringProperty() 
    score = ndb.IntegerProperty() 
    comment = ndb.TextProperty() 

class UserProfile(ndb.Model): 
    uid   = ndb.StringProperty(required=True) 
    password  = ndb.StringProperty(required=True) 
    firstName  = ndb.StringProperty(required=True) 
    favFruits  = ndb.StructuredProperty(FavFruits, repeated=True) 

fruitName에 대한 favFruits가 있습니다 (과일, 점수, fruit==fruitName과 관련된 덧글이 삭제됩니다). 루핑을 피하고 싶습니다.

행운을 들이지 않고 remove()delete() 개의 변형을 시도했습니다. 모든 안내가 크게 감사하겠습니다!

답변

0

StructuredProperty은 목록이지만 이제 Fruit 이름과 일치하지 않는 기본 문자열이 아닌 복잡한 개체를 저장하고 있습니다. 인덱스를 인수로 사용하는 pop을 사용하십시오. 과일 이름을 확인하는 목록을 반복하여 제거하려는 과일의 색인을 찾아야합니다.

관련 문제