1

我使用 SQLAlchemy 来定义一个User类。

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

现在,我最初在我的数据库中创建了一个匿名用户,使用 (say) 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提交一个新的创建,并且由于已设置为现有的 anonymous_user它崩溃由于 id 唯一性条件Useridid

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

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

我知道我可以通过 using 简单地定义一个 anonymous_user User.get_by_id(0),但是我必须在is_anonymous我的对象中添加一个字段并在每次检查我的用户是否是匿名的时进行变量检查(而不是有两个不同的类,一个是微不足道的实施is_anonymous: return False和其他使用is_anonymous: return True

4

1 回答 1

1

一个快速的建议。您可以像这样在 User 类上实现 is_anonymous 方法:

def is_anonymous(self):
    return self.id == 0
于 2012-08-07T15:36:06.913 回答