Message のキーの db.ListProperty によって関連付けられた、Message と Contact の 2 種類があるとします。ユーザーがメッセージを作成し、いくつかの連絡先を受信者として追加し、メッセージを電子メールで送信します。その後、ユーザーは、メッセージの受信者であった連絡先エンティティの 1 つを削除します。アプリケーションは適切な連絡先エンティティを削除する必要がありますが、ユーザーの記録のために送信されたメッセージの元の受信者リストを保持したいと考えています。要するに、送信時のメッセージ エンティティのスナップショットが必要です。ただし、単純に連絡先エンティティを削除すると、スナップショットの整合性が失われます。そうでない場合は、無効なキーが残ります。
コントローラーのロジックまたはモデルの変更において、この状況をどのように処理しますか?
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)