正确使用重复财产?

时间:2012-01-29 18:44:26

标签: python google-app-engine google-cloud-datastore python-2.7

我需要允许许多商品的订单/购买,例如

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

重复的关键字是否合法并且在这里以正确的方式使用?我还有什么其他选择?我应该使用重复的字符串属性吗?

item_ids = model.StringProperty(repeated=True) 或者重复的KeyProperties? 感谢

1 个答案:

答案 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())

以下查询将返回包含item1item2的所有购买:

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

如果您需要索引多个ListProperty,请不要忘记让自己熟悉exploding-indexes