我使用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
答案 0 :(得分:1)
快速建议。您可以在User类上实现is_anonymous方法,如下所示:
def is_anonymous(self):
return self.id == 0