我想记录用户所做的操作。在大多数 OO 语言中,我会通过一个LoggedAction
类来实现这一点,它有几个子类,例如LoginAction
和LogoutAction
. 然后我可以遍历一个 LoggedAction
s 列表并通过虚拟继承获得特定的子行为。但是,这不适用于 Django 模型。
示例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
)