時々、Redisやその他のバックエンドに大きく変化するフィールドを保存することがあります。データベース以外の自動属性をDjangoモデルインスタンスにする方法
しかし、このようにして、インスタンスから値を取得する利便性が失われる可能性があります。article.count
通常、メモリベースのデータベースを照会するロジックを実行するモデルにプロパティ関数を設定します。
class WhatEver(models.Model):
@property
def some_field(self):
return redis.hget('what-ever-%s' % self.id)
def set_some_field(self, value):
return redis.hset('what-ever-%s' % self.id, value)
醜いが有用である。
しかし、それは私たちに能力をもたらす侵入的な方法なので、常に機能しません。
と言うが、我々は、我々が実際にuser.visits
を呼び出したい
、
を、ユーザの訪問を取得したい。しかしサブモジュールは、ベースモジュールを上書きすることは良くありませんので、我々は唯一としてそれをラップすることができます機能get_user_visits(user)
と再びエレガントではありません。
私たちは、このような種類のトリックを自動的かつ非侵害的に行う方法がありますか?
おかげでインストールすることができます。 DjangoのORMメカニズムを使用する方法はありますか?モジュールを '上書きする'や 'monkey patch'はできませんか?モデルを「偽造する」方が良いでしょうか? – Cai
私があなたに書いたことは、上書きもサルのパッチもないことです。マニュアルで説明されている方法で、カスタム機能でORMを充実させる方法です。 –
はい、そうです。しかし、それはModelクラスで割り当てられた 'objects'を変更する必要がありますか?私が知っているように、元のモジュールに上書きしたりパッチを当てたりしない限り、 'instance.visits'のようなインスタンスから呼び出すことはできません。 – Cai