我最近在Google App Engine上从ext.db切换到NDB并遇到了困难(而且我对OOP还不熟悉)。
问题:用户可以输入他们喜欢的水果,分数和评论,这些水果,评分和评论将保存在结构化列表中。用户配置文件页面将列出水果名称和它们旁边的“删除水果”按钮,当单击它时,我希望从列表中删除条目,因此从结构化列表中删除。我能够使用ext.db删除列表中的元素而没有问题。
这是我以前用 ext.db ,没有“得分”或“评论”存储的内容:
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
这将从数据库中删除用户fruitName
指定的名称。
我想做的就是上面,实际上,现在使用名为favFruits的结构化列表,使用 NDB :
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)
我希望使用用户输入的favFruits
在fruitName
中找到条目,并删除与该fruitName相关的所有与favFruits相关的元素(以便删除与fruit==fruitName
相关的水果,分数,评论) 。我想避免循环。
我尝试了remove()
和delete()
组合的变体而没有运气。任何指导将不胜感激!
答案 0 :(得分:0)
StructuredProperty
是一个列表,但您现在存储的是一个复杂对象而不是基本字符串,它与Fruit
名称不匹配。使用pop
将索引作为参数。您需要通过迭代检查Fruit名称的列表来找到您要删除的Fruit的索引。