1

我有两种模型,CourtDays天数:

class CourtDays(db.Model):    #parent is Courts
    court = db.ReferenceProperty(Courts)
    reserveMaxTimeBefore = db.ListProperty(int)   
    reserveMinTimeBefore = db.ListProperty(int)
    day = db.StringProperty()

class Days (db.Model):
    court = db.ReferenceProperty(Courts)
    startTime = db.ListProperty(int)
    endTime = db.ListProperty(int)
    startTimeLunch = db.ListProperty(int)
    endTimeLunch = db.ListProperty(int)
    name = db.StringProperty()

即使“day”和“name”是一周中的 7 天,我可以删除其中的“day”CourtDays和“name” Days,而是使用key_name="day"and for put() 这两种类型吗?key_name="name"请注意,两者都CourtDays具有Days相同的 ReferenceProperty (并且也将具有相同的父级)。此外,请注意 otherCourtDays和 Days 将涉及相同的日期,但对于其他 CourtLocations 的父级和引用的其他法院。

此外,该方法get_or_insert()是否可用于确保“星期一”的CourtDaysDays实体可以修改但保持唯一?我问是因为数据存储文档说“get 和后续(可能的)put 操作被包装在事务中以确保原子性。这意味着get_or_insert() 永远不会覆盖现有实体,......”。尽管有这个短语并且正因为如此,这是否意味着“Model.get_or_insert(key_name,**kwds)”后面可以跟一个put()并覆盖特定实例?

4

1 回答 1

3

如果两个实体具有不同的种类、命名空间或父级,则它们可以具有相同的 key_name。如果两个键具有相同的种类、ids、parents 和 app_id,它们都指向同一个实体。

我相信这句话永远不会覆盖现有实体意味着get_or_insert如果存在具有这样一个键的实体(属性值不符合),则永远不会将实体放入数据存储区。是的,followedput()将覆盖该实例。

于 2012-08-18T19:37:08.747 回答