【问题标题】:Correct use of repeated property?正确使用重复属性?
【发布时间】:2012-01-29 18:44:25
【问题描述】:

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

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

这里重复的关键字是否合法并以正确的方式使用?我还有哪些其他选择?我应该用重复的字符串属性来代替吗?

item_ids = model.StringProperty(repeated=True) 还是使用重复的 KeyProperties? 谢谢

【问题讨论】:

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


    【解决方案1】:

    有一个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。

    【讨论】:

    • 嗨尼克。 :-) 混淆似乎在 NDB 和 db 之间。在 NDB 中,您使用 repeat=True,而在 db 中,您使用 ListProperty。
    • 感谢您的回答和评论。对于我的模型来说最自然的是重复的 Keyproperty,如果它有效,我会尝试,因为我喜欢 NDB 使用键的方式及其简洁的语法。
    • 我什至不知道ndb。非常感谢您的评论!
    猜你喜欢
    • 2020-12-12
    • 2020-12-16
    • 2011-04-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-15
    • 1970-01-01
    • 1970-01-01
    • 2010-10-20
    相关资源
    最近更新 更多