我需要允许许多商品的订单/购买,例如
class Purchase(db.Model):
'''a completed transaction'''
item = db.ReferenceProperty(Item, repeated=True))
重复的关键字是否合法并且在这里以正确的方式使用?我还有什么其他选择?我应该使用重复的字符串属性吗?
item_ids = model.StringProperty(repeated=True)
或者重复的KeyProperties?
感谢
答案 0 :(得分:3)
有一个ListProperty:
class Purchase(db.Model):
items = db.ListProperty(db.Key)
它像python列表一样使用:
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。