使用现有ID创建新对象

时间:2012-08-07 15:25:00

标签: python sqlalchemy

我使用SQLAlchemy来定义User类。

如果用户未登录我的网站,我想将其标识为AnonymousUser。我希望我的AnonymousUser成为我的普通User类的子类,使用特殊方法(例如is_anonymous(self): return true)。

现在,我最初在我的数据库中创建了一个匿名用户(例如)id = 0

我想将AnonymousUser定义为User的子类,其中构造函数只返回匿名用户:

class AnonymousUser(User):
    def __init__(self):
        anonymous_user = User.get_by_id(0)
        self.username = anonymous_user.username
        self.id = anonymous_user.id
        ...

但是当我创建AnonymousUser时,它不理解我不想要新的User,而只是创建一个现有的User,它承诺创建会话的新User,并且由于id已设置为现有的anonymous_user id,因为id unicity条件而崩溃

如何告诉SQLAlchemy使用现有ID创建User对象?

有没有更优雅的方式来做我想要的事情?

我知道我可以使用User.get_by_id(0)简单地定义anonymous_user,但是我必须在我的对象中添加is_anonymous字段,每次检查用户是否为匿名(而不是有两个不同的类,一个具有简单的实现is_anonymous: return False,另一个使用is_anonymous: return True

1 个答案:

答案 0 :(得分:1)

快速建议。您可以在User类上实现is_anonymous方法,如下所示:

def is_anonymous(self):
    return self.id == 0