ユーザーが行ったアクションをログに記録したい。ほとんどの OO 言語では、や などLoggedAction
のいくつかの子クラスを持つクラスを介してこれを実装します。その後、 のリストを反復処理し、 仮想継承を通じて特定の子の動作を取得できます。ただし、これは Django モデルでは機能しません。LoginAction
LogoutAction
LoggedAction
例models.py
:
class LoggedAction(models.Model):
user = models.ForeignKey(User)
timestamp = models.DateTimeField(auto_now_add=True)
def __unicode__(self):
return "%s: %s %s" % (unicode(self.timestamp), unicode(self.user), unicode(self.action()))
def action(self):
return ""
class LoginAction(LoggedAction):
def action(self):
return "logged in"
class LogoutAction(LoggedAction):
def action(self):
return "logged out"
[unicode(l) for l in LoggedAction.objects.all()]
次に、次のようなメッセージのリストを取得したいと思いますu'2012-02-18 18:47:09.105840: knatten logged in'
。
期待どおり、これは機能しません。取得するのは、メンバーまたはメンバーのいずれかを持つオブジェクトall()
のリストだからです。(出力は のようなメッセージのリストであり、アクションについては言及されていません。)LoggedAction
loginaction
logoutaction
u'2012-02-18 18:47:09.105840: knatten
私が求めている動作を取得するための適切な方法はありますか、またはここで間違ったパラダイムを適用しようとしていますか? (私はそうだと思います. のメンバーとして特定のアクションを実行する必要がありますLoggedAction
)