0

私はメッセージモデルを持っています。このモデルに、ブール値フィールドを使用して行った既読/未読フィールドを追加したいと考えています。誰かがこのメッセージを読んだら、このブール値フィールドを true に変えたいと思います。アプリのさまざまな部分でこれらのメッセージにアクセスするため、フィールドを手動で更新するのは面倒です。

いくつかの条件に従っていくつかのメッセージを取得する方法はありますか?メッセージがデータベースからフェッチされると、フィールドは自動更新されますか?

4

2 に答える 2

2

カスタム モデル マネージャread_message()でメソッドを作成してみませんか。返された各メッセージのフィールドを更新しながら、このメソッドが必要なメッセージを返すようにします。

新しいメソッドを使用すると、次のものに置き換えることができMessage.objects.get()ますMessage.objects.read_message()

class MessageManager(models.Manager):
    def read_message(self, message_id):
        # This won't fail quietly it'll raise an ObjectDoesNotExist exception
        message = super(MessageManager, self).get(pk=message_id)
        message.read = True
        message.save()
        return message

次に、モデルにマネージャーを含めます-

class Message(models.Model):
    objects = MessageManager()

明らかに、返されたすべてのメッセージを既読としてマークしながら、クエリセットを返す他のメソッドを作成できます。

コード ( を呼び出す場所) を更新したくない場合はMessage.objects.get()、いつでも実際にオーバーライドして、フィールドget()を更新することができreadます。read_message上記の関数名を に置き換えるだけgetです。

于 2013-02-19T18:25:42.180 に答える
1

データベース管理システムによっては、トリガーをインストールできる場合があります。

PostgreSQL: http://www.postgresql.org/docs/9.1/static/sql-createtrigger.html

MySQL: http://dev.mysql.com/doc/refman/5.0/en/triggers.html

SQLite: http://www.sqlite.org/lang_createtrigger.html

もちろん、これは Django アプリケーションの外部で、データベース内で手動で行う必要があります。

于 2013-02-19T18:25:06.877 に答える