假设您有两种类型,Message 和 Contact,由 Message 上的键的 db.ListProperty 关联。用户创建消息,添加一些联系人作为收件人,然后通过电子邮件发送消息。稍后,用户删除作为消息接收者的联系人实体之一。我们的应用程序应该删除适当的联系人实体,但我们希望保留发送给用户记录的消息的原始收件人列表。本质上,我们想要消息实体在发送时的快照。但是,如果我们天真地删除联系人实体,我们就会失去快照完整性;如果没有,我们会留下一个无效的密钥。
您将如何处理这种情况,无论是在控制器逻辑还是模型更改中?
class User(db.Model):
email = db.EmailProperty(required=True)
class Contact(db.Model):
email = db.EmailProperty(required=True)
user = db.ReferenceProperty(User, collection_name='contacts')
class Message(db.Model):
recipients = db.ListProperty(db.Key) # contacts
sender = db.ReferenceProperty(User, collection_name='messages')
body = db.TextProperty()
is_emailed = db.BooleanProperty(default=False)