Flask 自关联表的错误:InvalidRequestError: Multiple classes found for path "Follow" in t

Yambo1992 2018-04-19 01:37:48

#自引用多对多关系表
#这是models.py 中的Follow类
class Follow(db.Model):
__tablename__ = 'followss'

follower_id = db.Column(db.Integer, db.ForeignKey('users.id'),
primary_key=True)
followed_id = db.Column(db.Integer, db.ForeignKey('users.id'),
primary_key=True)
timestamp = db.Column(db.DateTime, default=datetime.datetime.utcnow)

#这是用户User类,筛选了主要可能有错的地方
class User(UserMixin, db.Model):
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(64), unique=True, index=True)
password_hash = db.Column(db.String(128))
confirmed = db.Column(db.Boolean, default=False)
name = db.Column(db.String(64))

followed = db.relationship('Follow',
foreign_keys=[Follow.follower_id],
backref=db.backref('follower', lazy='joined'),
lazy='dynamic', cascade='all, delete-orphan')

followers = db.relationship('Follow',
foreign_keys=[Follow.followed_id],
backref=db.backref('followed', lazy='joined'),
lazy='dynamic',
cascade='all, delete-orphan')

def __init__(self, **kwargs):
super(User, self).__init__(**kwargs)

def follow(self, user):
if not self.is_following(user):
f = Follow(follower=self, followed=user)
db.session.add(f)

def unfollow(self, user):
f = self.followed.filter_by(followed_id=user.id).first()
if f:
db.session.delete(f)

def is_following(self, user):
return self.followed.filter_by(
followed_id=user.id).first() is not None

def is_followed_by(self, user):
return self.followers.filter_by(
follower_id=user.id).first() is not None

#报错如下:
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/home/yambo1992/projects/blog_1/flaskypr/env0/local/lib/python2.7/site-packages/flask_sqlalchemy/__init__.py", line 512, in __get__
mapper = orm.class_mapper(type)
File "/home/yambo1992/projects/blog_1/flaskypr/env0/local/lib/python2.7/site-packages/sqlalchemy/orm/base.py", line 421, in class_mapper
mapper = _inspect_mapped_class(class_, configure=configure)
File "/home/yambo1992/projects/blog_1/flaskypr/env0/local/lib/python2.7/site-packages/sqlalchemy/orm/base.py", line 400, in _inspect_mapped_class
mapper._configure_all()
File "/home/yambo1992/projects/blog_1/flaskypr/env0/local/lib/python2.7/site-packages/sqlalchemy/orm/mapper.py", line 1272, in _configure_all
configure_mappers()
File "/home/yambo1992/projects/blog_1/flaskypr/env0/local/lib/python2.7/site-packages/sqlalchemy/orm/mapper.py", line 3029, in configure_mappers
mapper._post_configure_properties()
File "/home/yambo1992/projects/blog_1/flaskypr/env0/local/lib/python2.7/site-packages/sqlalchemy/orm/mapper.py", line 1828, in _post_configure_properties
prop.init()
File "/home/yambo1992/projects/blog_1/flaskypr/env0/local/lib/python2.7/site-packages/sqlalchemy/orm/interfaces.py", line 184, in init
self.do_init()
File "/home/yambo1992/projects/blog_1/flaskypr/env0/local/lib/python2.7/site-packages/sqlalchemy/orm/relationships.py", line 1655, in do_init
self._process_dependent_arguments()
File "/home/yambo1992/projects/blog_1/flaskypr/env0/local/lib/python2.7/site-packages/sqlalchemy/orm/relationships.py", line 1712, in _process_dependent_arguments
self.target = self.mapper.mapped_table
File "/home/yambo1992/projects/blog_1/flaskypr/env0/local/lib/python2.7/site-packages/sqlalchemy/util/langhelpers.py", line 767, in __get__
obj.__dict__[self.__name__] = result = self.fget(obj)
File "/home/yambo1992/projects/blog_1/flaskypr/env0/local/lib/python2.7/site-packages/sqlalchemy/orm/relationships.py", line 1628, in mapper
argument = self.argument()
File "/home/yambo1992/projects/blog_1/flaskypr/env0/local/lib/python2.7/site-packages/sqlalchemy/ext/declarative/clsregistry.py", line 281, in __call__
x = eval(self.arg, globals(), self._dict)
File "<string>", line 1, in <module>
File "/home/yambo1992/projects/blog_1/flaskypr/env0/local/lib/python2.7/site-packages/sqlalchemy/util/_collections.py", line 729, in __missing__
self[key] = val = self.creator(key)
File "/home/yambo1992/projects/blog_1/flaskypr/env0/local/lib/python2.7/site-packages/sqlalchemy/ext/declarative/clsregistry.py", line 262, in _access_cls
return _determine_container(key, cls._decl_class_registry[key])
File "/home/yambo1992/projects/blog_1/flaskypr/env0/local/lib/python2.7/site-packages/sqlalchemy/ext/declarative/clsregistry.py", line 246, in _determine_container
value = value.attempt_get([], key)
File "/home/yambo1992/projects/blog_1/flaskypr/env0/local/lib/python2.7/site-packages/sqlalchemy/ext/declarative/clsregistry.py", line 91, in attempt_get
(".".join(path + [key]))
InvalidRequestError: Multiple classes found for path "Follow" in the registry of this declarative base.
Please use a fully module-qualified path.

...全文
970 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

37,720

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧