JSON オブジェクトを含む UserProfile オブジェクトにいくつかの TextField 列があります。JSON を Python データ構造にシリアライズおよびデシリアライズするためのロジックをカプセル化する、各列のセッター/ゲッター プロパティも定義しました。
このデータの性質により、単一のリクエスト内でビューおよびテンプレート ロジックによって何度もアクセスされることが保証されます。逆シリアル化のコストを節約するために、読み取り時にpythonデータ構造をメモ化し、プロパティへの直接書き込み時に無効にするか、モデルオブジェクトからの信号を保存したいと思います。
メモはどこにどのように保存しますか? 特定の UserProfile がクエリによってどのようにインスタンス化されるかの背後にある魔法を理解していないため、インスタンス変数の使用について神経質になっています。安全に使用できますか、または読み取りごと__init__
に memo 属性の存在を確認する必要がありますか?hasattr()
これが私の現在の実装の例です:
class UserProfile(Model):
text_json = models.TextField(default=text_defaults)
@property
def text(self):
if not hasattr(self, "text_memo"):
self.text_memo = None
self.text_memo = self.text_memo or simplejson.loads(self.text_json)
return self.text_memo
@text.setter
def text(self, value=None):
self.text_memo = None
self.text_json = simplejson.dumps(value)