3

次のような Django モデルが与えられた場合:

from django.db import models

class MyModel(models.Model):
    textfield = models.TextField()

次のようなワークフローを使用して、プロパティにアクセスしたとき (つまり、ロードしていないとき) に自動的に圧縮textfield(例: を使用zlib) して解凍するにはどうすればよいですか?save()textfield


m = MyModel()
textfield = "Hello, world, how are you?"
m.save() # compress textfield on save
m.textfield # no decompression
id = m.id()

m = MyModel.get(pk=id) # textfield still compressed
m.textfield # textfield decompressed

オーバーロードすると思いがちですがMyModel.save、保存時に要素をインプレースで変更するパターンがわかりません。また、フィールドがアクセスされたときにDjangoで解凍する最良の方法もわかりません(オーバーロード__getattr__?)。

または、これを行うより良い方法は、カスタム フィールド タイプを使用することでしょうか?

ほぼ正確にこれの例を見たことがあると確信していますが、残念ながら最近は見つけることができませんでした.

読んでいただき、ありがとうございます。また、ご意見をお寄せいただきありがとうございます。

4

4 に答える 4

2

カスタム フィールド タイプにto_pythonget_prep_valueを実装して、データをそれぞれ解凍および圧縮する必要があります。

于 2010-04-04T11:44:02.973 に答える
2

カスタムフィールドタイプは間違いなくここに行く方法です. これは、フィールドが保存時に圧縮され、読み込み時に圧縮解除されることを保証する唯一の信頼できる方法です。リンクに記載されているようにメタクラスを設定してください。

于 2010-03-31T16:33:05.963 に答える