我有两种模型,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()
我可以删除CourtDays
中的“日期”和Days
中的“名称”,而是使用key_name="day"
和key_name="name"
来放置()这两种虽然“日”和“名字”是一周中的七天?请注意,CourtDays
和Days
都具有相同的ReferenceProperty (并且也将具有相同的父级)。此外,请注意其他CourtDays
和Days将涉及相同的日期,但对于其他Courtlocations提供父级和引用的其他法院。
此外,方法get_or_insert()
是否可用于确保CourtDays
或Days
实体(例如“星期一”)可以修改但保持唯一?我问,因为datastore docs说“get和后续(可能)put操作包含在事务中以确保原子性。这意味着get_or_insert()
永远不会覆盖现有实体 ,......“。尽管有这个短语并且因为它,这是否意味着“Model.get_or_insert(key_name,** kwds)”可以跟put()
后面并覆盖特定实例?
答案 0 :(得分:3)
如果两个实体具有不同的种类,名称空间或父级,则它们可以具有相同的key_name。如果两个键具有相同的种类,ids,parent和app_id,则它们都指向同一个实体。
我认为短语永远不会覆盖现有实体意味着如果存在具有此类密钥的实体(属性值不能满足),get_or_insert
将永远不会将实体放入数据存储区。是的,跟着put()
将覆盖该实例。